【问题标题】:Parse a string array in json response [closed]解析json响应中的字符串数组[关闭]
【发布时间】:2018-11-11 23:34:37
【问题描述】:

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

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

【问题讨论】:

  • 你的问题是什么?将json读取为包含两个字符串的数组或处理这两个字符串的内容?像往常一样用一段代码尝试解决问题是解释问题的最佳方式
  • 如果您的意思是“解析 JSON”:不要这样做,Json.NET 会为您执行此操作!如果您的意思是“解析数组中的字符串”,那么这个问题根本与 JSON 无关。
  • @Steve 我会试着更好地问这个问题,两者兼而有之。我通常的方法是以 JObject 的形式接收响应,然后执行 $"{json["fields"]}" 来获取字符串,但在这种情况下,这会给我一个巨大的字符串。我查找了 JArray.Parse,但无法使其工作

标签: c# .net json json.net


【解决方案1】:

你可以通过这种方式解析那个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);
    }
}

我建议在 LinqPad 中使用 Dump 方法在变量行 x 和 k 上尝试此代码,以了解 Parse 返回的 JObject 的内部结构。

【讨论】:

    【解决方案2】:

    如果您只需要解析 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

    【讨论】:

    • 谢谢!这真的很有帮助,我正在寻找类似 Values 函数的东西。
    猜你喜欢
    • 2014-01-04
    • 1970-01-01
    • 2014-04-12
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多