我可以使用以下命令获得一个动态Json对象
dynamic obj = JsonConvert.DeserializeObject(json);
它似乎是一个嵌套的对象结构
我需要为json文件中的每个变量绘制图形,但是json文件结构经常更改。
有没有办法使用嵌套的foreach()语句来解析这个结构?如果不能,我可以通过像字典一样的字符串访问每个元素来解析它吗?
例如,如下所示:
if(obj["Item1"]["Parameter3"]["Value2"]` != NULL)
int number = obj["Item1"]["Parameter3"]["Value2"]`
谢谢,
发布于 2019-08-28 03:53:35
是的,有一个用于动态查询的API。请参阅此处的文档:https://www.newtonsoft.com/json/help/html/QueryingLINQtoJSON.htm
代码看起来像这样:
JObject rss = JObject.Parse(json);
var postTitles =
from p in rss["channel"]["item"]
select (string)p["title"];
发布于 2019-08-28 05:36:27
最终弄清楚了这个api
一些JToken条目具有值列表,其他条目具有名称和值。在解析它之前,您必须对哪个是哪个进行排序。
这将为Json文件中的每个条目创建一个字典
void SomeFunction()
{
Dictionary<string, decimal> json_data = new Dictionary<string, decimal>();
dynamic json_obj = JsonConvert.DeserializeObject(json);
Linearize(ref json_data, json_obj);
}
void Linearize(ref Dictionary<string, decimal> input_dict, JToken json_data, string key = "")
{
int i;
if (json_data != null)
{
if (json_data.HasValues)
{
i = 0;
foreach (dynamic entry in json_data)
{
//Add a Name field if it exists
Type typeOfDynamic = entry.GetType();
if (typeOfDynamic.GetProperties().Where(p => p.Name.Equals("Name")).Any())
key += entry.Name + ".";
//If JToken is an Array
if (((JToken)entry).HasValues)
{
Linearize(ref input_dict, entry, key + "[" + i++ + "]" + ".");
}
//If JToken is a data type
else if (entry.Type == JTokenType.String || entry.Type == JTokenType.Float || entry.Type == JTokenType.Integer)
{
decimal output;
if (decimal.TryParse(entry.ToString(), out output))
input_dict.Add(key + "[" + i++ + "]", output);
}
}
}
}
}
https://stackoverflow.com/questions/57681326
复制相似问题