如何用C#从混合数据的ReactJS文件中提取JSON获取版本号
从混合JS文件中提取版本号的规范C#实现
针对你要从React打包后的JS文件中提取shortVersion版本号的需求,之前的字符串截取方法可靠性不足,这里提供两种更规范的实现方式:
方法1:正则匹配完整JSON片段 + JSON解析器
这种方法先通过正则定位包含shortVersion的JSON键值对结构,再用官方JSON解析器处理,准确性更高,能适配压缩后的JS格式:
实现代码
using System; using System.IO; using System.Text.RegularExpressions; using System.Text.Json; public static string ExtractShortVersion(string pathToFile) { // 匹配固定格式的shortVersion键值对(适配压缩后的JS语法) var versionRegex = new Regex(@"{""shortVersion"":""([^""]+)""}", RegexOptions.Compiled); // 一次性读取整个文件内容(压缩后的JS通常是单行,按行读会失效) var jsContent = File.ReadAllText(Directory.GetFiles(pathToFile, "main.*.js")[0]); var matchResult = versionRegex.Match(jsContent); if (matchResult.Success) { // 直接捕获版本号 return matchResult.Groups[1].Value; // 若需完整解析JSON对象,可启用以下代码: // var jsonFragment = matchResult.Value; // var versionObj = JsonSerializer.Deserialize<VersionModel>(jsonFragment); // return versionObj.ShortVersion; } return null; // 未找到目标时返回null } // 用于反序列化的实体类 public class VersionModel { [JsonPropertyName("shortVersion")] public string ShortVersion { get; set; } }
方法2:精准字符串定位截取
如果JS文件中版本号的格式固定(比如"shortVersion":"vX.X.X"),可以优化原有逻辑,只提取版本号部分:
实现代码
using System; using System.IO; public static string GetShortVersion(string pathToFile) { string[] targetFiles = Directory.GetFiles(pathToFile, "main.*.js"); if (targetFiles.Length == 0) return null; var content = File.ReadAllText(targetFiles[0]); var keyword = "\"shortVersion\":\""; int startPos = content.IndexOf(keyword); if (startPos == -1) return null; // 定位到版本号起始位置 startPos += keyword.Length; // 找到版本号结尾的双引号位置 int endPos = content.IndexOf('"', startPos); return endPos > startPos ? content.Substring(startPos, endPos - startPos) : null; }
关键优化说明
- 一次性读取文件:压缩后的React JS文件基本是单行结构,按行读取会导致无法定位目标内容,一次性读取更可靠。
- 避免冗余内容:两种方法都精准定位版本号的边界,不会截取到后续无关的JS代码片段。
- 可扩展性:方法1支持后续扩展提取更多JSON字段,方法2更轻量高效,适合固定格式的场景。
内容的提问来源于stack exchange,提问作者Tiffany
相关产品推荐
相关产品推荐

