如何使用 JSON 路径获取 JSON 字符串的一部分而不是 JToken?
Posted
技术标签:
【中文标题】如何使用 JSON 路径获取 JSON 字符串的一部分而不是 JToken?【英文标题】:How to get section of JSON string instead of JToken using JSON path? 【发布时间】:2019-01-20 10:54:34 【问题描述】:我正在寻找使用 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
]
]
有没有办法得到这样的输出?
【问题讨论】:
您是否正在从this answer 到How to perform partial object serialization providing “paths” using Newtonsoft JSON.NET 寻找类似JsonExtensions.RemoveAllExcept(this JObject obj, IEnumerable<string> paths)
的内容?
【参考方案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 + "";
【讨论】:
以上是关于如何使用 JSON 路径获取 JSON 字符串的一部分而不是 JToken?的主要内容,如果未能解决你的问题,请参考以下文章
Android:如何获取“serviceAccountCredentials.json”文件路径
如何在 MySQL/MariaDB 中将 LONGTEXT 字段作为 JSON 返回