You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C#解析JS文件中含‘Name = ’格式的类JSON内容?

解决C#解析带变量赋值的类JSON JS文件问题

这个问题很常见——你的JS文件是JS变量赋值格式,不是标准JSON,所以Newtonsoft.Json(Json.NET)没法直接解析。下面给你两种实用的解决思路,根据你的场景选就行:

方法1:文本预处理转标准JSON

核心思路是把非标准的JS格式转换成Newtonsoft能识别的JSON结构,不需要额外依赖。

具体步骤&代码示例

假设你的JS文件内容是:

Name1 = { p1:0, p2:1, p3:2 }; Name2 = { p1:"None", p2:"Snappy", p3:"gzip" };

我们可以通过字符串替换+正则把它转换成{"Name1": {"p1":0,...}, "Name2": {"p1":"None",...}}这种标准JSON:

using System.IO;
using System.Text.RegularExpressions;
using Newtonsoft.Json;

// 1. 读取文件内容
string jsContent = File.ReadAllText("your-file.js");

// 2. 清理注释(如果文件有注释的话,必须先处理)
string cleaned = Regex.Replace(jsContent, @"//.*$", "", RegexOptions.Multiline); // 去掉单行注释
cleaned = Regex.Replace(cleaned, @"/\*.*?\*/", "", RegexOptions.Singleline);    // 去掉多行注释

// 3. 去掉分号、多余空格
cleaned = cleaned.Replace(";", "").Trim();

// 4. 给JS属性名加双引号(JSON要求属性名必须带双引号)
cleaned = Regex.Replace(cleaned, @"(\w+):", "\"$1\":");

// 5. 把变量赋值格式转成JSON键值对
cleaned = Regex.Replace(cleaned, @"(\w+)\s*=", "\"$1\":");

// 6. 包裹成完整的JSON对象
string validJson = $"{{ {cleaned} }}";

// 7. 现在可以用Newtonsoft解析了
// 用动态类型处理不同属性值(比如Name1的p1是数字,Name2的p1是字符串)
var result = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(validJson);

// 访问示例
int name1P1 = result["Name1"].p1;
string name2P1 = result["Name2"].p1;

优缺点

  • ✅ 优点:不需要引入第三方库,轻量快速
  • ❌ 缺点:正则匹配依赖固定格式,如果JS文件里有复杂内容(比如字符串里包含:, 变量名带特殊字符),正则可能失效,适合结构简单的场景

方法2:用.NET JS引擎直接执行解析

如果你的JS文件结构复杂(比如有函数、复杂表达式、特殊字符变量名),预处理容易出错,推荐用Jint(一个轻量的.NET JavaScript引擎)直接执行JS代码,获取变量值。

具体步骤&代码示例

  1. 先安装Jint NuGet包:Install-Package Jint(或者在NuGet管理器里搜索Jint安装)
  2. 编写代码执行JS并获取变量:
using System.IO;
using Jint;

// 1. 初始化JS引擎
var engine = new Engine();

// 2. 执行JS文件内容
engine.Execute(File.ReadAllText("your-file.js"));

// 3. 获取指定变量的值,支持转成强类型或动态类型
// 转成动态类型
dynamic name1 = engine.GetValue("Name1").ToObject();
dynamic name2 = engine.GetValue("Name2").ToObject();

// 或者转成自定义强类型(注意属性类型要匹配,比如p1可能是int或string,建议用object/dynamic)
public class ConfigItem
{
    public object p1 { get; set; }
    public string p2 { get; set; }
    public string p3 { get; set; }
}

var name1Strong = engine.GetValue("Name1").ToObject<ConfigItem>();

优缺点

  • ✅ 优点:完全兼容JS语法,不管结构多复杂都能正确解析,最可靠
  • ❌ 缺点:需要引入第三方库,性能比纯文本处理稍差(但绝大多数场景可以忽略)

额外提示

如果你的JS文件里有大量类似的变量赋值,两种方法都可以批量处理。比如用方法1解析后得到的Dictionary<string, dynamic>可以直接遍历所有配置项,非常方便。

内容的提问来源于stack exchange,提问作者Ariel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:27:18