通过在运行时定义键模式获取任何 json 的值

Get value of any json by defining a key pattern at runtime

我想提取任何我在编译时不知道其结构的 json 的值。所以我正在寻找类似的东西:

public class JsonExtractor
{
    public string GetValue(string pattern, string json)
    {
        return JsonConvert.GetValue<string>(json, pattern);
    }
}
string pattern = ".data.value";
string json = "{\"request\": {\"method\": \"get\", \"key\": \"test\"}, \"code\": 0, \"type\": \"call\", \"data\": {\"value\": 14.0}}";

var jsonExtractor = new JsonExtractor();
var value = jsonExtractor.GetValue(pattern, json);

这里重要的是 pattern 的值和 json 的值+结构在编译时是未知的,我只是为了说明而创建了这两个变量。我想在运行时获取任何 json 内的特定值。

使用 SelectToken 并将您的模式修改为 JSON路径(只是在开头添加一个“$”)。

string pattern = "$.data.value";
string json = "{\"request\": {\"method\": \"get\", \"key\": \"test\"}, \"code\": 0, \"type\": \"call\", \"data\": {\"value\": 14.0}}";
int data = JToken.Parse(json).SelectToken(pattern).Value<int>();
Console.WriteLine(data); // print "14"

请注意,您也可以将 <string> 作为通用参数,即使 JSON 值是一个数字。