JSON.NET JObject - 如何从这个嵌套的JSON结构中获取值?

34
{"name":"John","age":30,"city":"New York"}
我有这个 JSON:
{
    "client_id": "26075235",
    "client_version": "1.0.0",
    "event": "app.uninstall",
    "timestamp": 1478741247,
    "data": {
        "user_id": "62581379",
        "site_id": "837771289247593785",
        "platform_app_id": "26075235"
    }
}

我将其解析为JSON.NET JObject,可以成功地使用例如 (string)RequestBody.SelectToken("client_id") 访问第一级值。

如何使用JPath表达式(或通过访问JSON.NET JObject的子对象)访问“user_id”的值? 这样做不起作用:

(string)RequestBody.SelectToken("data[0].user_id")

而且我无法解析JSON的“data”部分:

JObject RequestBodyData = JObject.Parse((string)RequestBody.SelectToken("data"));

编译器似乎将RequestBody.SelectToken("data")识别为一个对象(我得到了错误信息'Can not parse object into string')

我不想将原始的JSON解析成自定义C#对象,因为我正在开发一种需要能够通用解析JSON为JObject(或任何其他类型的通用对象来处理JSON)的解决方案,因此它可以以相对一致的方式进行解析。

1个回答

44

SelectToken("data[0].user_id")不起作用是因为你的JSON中没有数组。你应该使用SelectToken("data.user_id")

演示代码:https://dotnetfiddle.net/K0X4ht


1
这在2022年仍然非常有效,而dotnetfiddle使得在我的奇怪数据上进行测试变得非常简单。 - avirr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接