我必须接受以下格式的json响应,该响应在字符串数组中可以有很多“字段”。在可以提取“字段值”并对它们执行一些操作的循环中,最简单的解析方法是什么?
{
"fields":
[
"/field1/{field1value}/field2/{field2value}/field3/{field3value}",
"/field1/{field1value}/field2/{field2value}/field3/{field3value}"
]
}
答案 0 :(得分:2)
您可以解析Json并以此方式获取单行数据
// As an example for your input data.....
string json = "{\"fields\":[\"/field1/{field1value}/field2/{field2value}/field3/{field3value}\",\"/field1/{field1value}/field2/{field2value}/field3/{field3value}\"]}";
// Json.NET JObject.Parse
var lines = JObject.Parse(json);
// Remove comment with LinqPad
// lines.GetType().Dump();
// Not really needed to explicitly use the Properties method...
foreach (var x in lines.Properties())
{
// Remove comment with LinqPad
// x.GetType().Dump();
foreach (var k in x.Value)
{
// Remove comment with LinqPad
// k.GetType().Dump();
string dataLine = k.Value<string>();
Console.WriteLine(dataLine);
}
}
我建议在变量行x和k上使用Dump方法在LinqPad上尝试使用此代码,以了解由Parse返回的JObject的内部结构。
答案 1 :(得分:1)
如果只需要解析JSON并遍历fields
数组中的字符串,则可以这样做:
JObject obj = JObject.Parse(json);
foreach (var path in obj["fields"].Values<string>())
{
Console.WriteLine(path);
}
如果您需要将字符串分解为名称/值对,则可以在/
上分割并在这样的部分上循环(在上一个循环内):
string[] parts = path.Split('/');
for (var i = 1; i < parts.Length; i += 2)
{
var name = parts[i];
var value = (i + 1 < parts.Length) ? parts[i + 1] : null;
Console.WriteLine(name + ": " + value);
}
在这里查看小提琴:https://dotnetfiddle.net/TupvAu