如何使用JSON路径获取JSON字符串部分而不是JToken?

时间:2018-08-13 16:38:36

标签: c# json json.net jsonpath

我正在寻找使用SelectTokens(JPath)获取JSON字符串而不是JTOken集合的最佳方法。

例如:

JObject o = JObject.Parse(@"{
      'Stores': [
        'Lambton Quay',
        'Willis Street'
      ],
      'Manufacturers': [
        {
          'Name': 'Acme Co',
          'Products': [
            {
              'Name': 'Anvil',
              'Price': 50
            }
          ]
        },
        {
          'Name': 'Contoso',
          'Products': [
            {
              'Name': 'Elbow Grease',
              'Price': 99.95
            },
            {
              'Name': 'Headlight Fluid',
              'Price': 4
            }
          ]
        }
      ]
    }");

List<JToken> manufactures = o.SelectTokens("Manufacturers");

我需要输出JSON字符串而不是JToken的集合。

预期输出:

{
    "Manufacturers": [
        {
            "Name": "Acme Co",
            "Products": [
                {
                    "Name": "Anvil",
                    "Price": 50
                }
            ]
        },
        {
            "Name": "Contoso",
            "Products": [
                {
                    "Name": "Elbow Grease",
                    "Price": 99.95
                },
                {
                    "Name": "Headlight Fluid",
                    "Price": 4
                }
            ]
        }
    ]
}

有什么办法可以得到这样的输出吗?

1 个答案:

答案 0 :(得分:1)

有两种方法可以做到这一点: 您不能将其转换为要在提问中使用的确切JSON,但可以将其提取为实际格式,即在这种情况下为数组。见下文:

Working Example in Fiddle

using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

public class Program
{
        public static JsonSerializer _serializer = new JsonSerializer();


    public static void Main()
    {
        JObject o = JObject.Parse(@"{
              'Stores': [
                'Lambton Quay',
                'Willis Street'
              ],
              'Manufacturers': [
                {
                  'Name': 'Acme Co',
                  'Products': [
                    {
                      'Name': 'Anvil',
                      'Price': 50
                    }
                  ]
                },
                {
                  'Name': 'Contoso',
                  'Products': [
                    {
                      'Name': 'Elbow Grease',
                      'Price': 99.95
                    },
                    {
                      'Name': 'Headlight Fluid',
                      'Price': 4
                    }
                  ]
                }
              ]
            }");

        Console.WriteLine("1. Print the key Value");
        Console.WriteLine(o["Manufacturers"].ToString());
        Console.WriteLine("--------");
        Console.WriteLine("2. Iterate and print by keyname - (Key - Value) ");

            foreach(var m in o){

                if(m.Key == "Manufacturers")
                Console.WriteLine(m.ToString());
            }


    }

}

另一个选择是您可以破解它-使用上面的示例提取字符串,然后在花括号之间添加字符串

var json = "{" + extractedString + "}";