解析json响应中的字符串数组

时间:2018-11-11 23:34:37

标签: c# .net json json.net

我必须接受以下格式的json响应,该响应在字符串数组中可以有很多“字段”。在可以提取“字段值”并对它们执行一些操作的循环中,最简单的解析方法是什么?

 {
   "fields":
 [
   "/field1/{field1value}/field2/{field2value}/field3/{field3value}",
   "/field1/{field1value}/field2/{field2value}/field3/{field3value}"
 ]
 }

2 个答案:

答案 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