我正在寻找使用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
}
]
}
]
}
有什么办法可以得到这样的输出吗?
答案 0 :(得分:1)
有两种方法可以做到这一点: 您不能将其转换为要在提问中使用的确切JSON,但可以将其提取为实际格式,即在这种情况下为数组。见下文:
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 + "}";