通过在运行时定义键模式获取任何 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 值是一个数字。
我想提取任何我在编译时不知道其结构的 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 值是一个数字。