JSON.NET动态解析(更高效的解决方案)(JSON.NET Dynamic Parsing (M

2019-10-20 01:41发布

所以我用JSON.NET解析JSON数据。 我已经使用了动态解析JObject类的工作,但我正在寻找一种更有效的方式。 这仅仅是基础,我的最终解决方案会更加复杂,但首先的首先,我需要的基本知识。

所以我有这个JSON数据...

{
    "count":1,
    "results": [{
        "user_id":5029420,
        "login_name":"EtsyStore",
        "creation_tsz":1282269739,
        "referred_by_user_id":null,
        "feedback_info": {
            "count":3038,
            "score":100
         }
     }],
     "params": {
         "user_id":"etsystore"
     },
     "type":"User",
    "pagination":{}
}

这里是到目前为止我当前的代码......我想获得的价值user_idresults对象。

Dim p1 = JObject.Parse(json)
Dim p2 = JObject.Parse(p1("results").ToString.Replace("[", "").Replace("]", ""))
MsgBox(p2("user_id"))

所以我能够得到的价值user_id ,但我不认为这是做的最有效的方式。 是否有这样做的另一种方式? 非常感谢你:)如果有人已经拥有了代码,C#或VB.NET会做,但指南将只是做对我很好,谢谢:)

Answer 1:

当使用JSON解析器,你应该不需要直接操纵JSON字符串(即分析器的工作),也不解析JSON不止一次(该数据已在内存中,从第一解析)。 所以,你是对的,你在做什么不提取数据的最佳方式。

下面是如何可以提取的示例user_id从JSON使用和其他结果数据LINQ到JSON API (即JObjects / JTokens)。 因为results是在JSON数组,我假设有可能并不总是只有一个结果,所以我会在这里使用一个循环。

' load all the JSON data into a JObject
Dim p1 As JObject = JObject.Parse(json)

' loop over the "results" array to get each child object (result)
For Each result As JToken In p1("results").Children()

    ' extract the data from each result
    Dim userId As Integer = result("user_id").Value(Of Integer)()
    Dim loginName As String = result("login_name").ToString()
    Dim creationTsz As Long = result("creation_tsz").Value(Of Long)()

    ' the feedback info is one level further down
    Dim feedback As JToken = result("feedback_info")
    Dim feedbackCount As Integer = feedback("count").Value(Of Integer)()
    Dim feedbackScore As Integer = feedback("score").Value(Of Integer)()

    ' do something with the data; perhaps write it to the console
    Console.WriteLine("User ID: " + userId.ToString())
    Console.WriteLine("Login Name: " + loginName.ToString())
    Console.WriteLine("Creation TSZ: " + creationTsz.ToString())
    Console.WriteLine("Feedback Count: " + feedbackCount.ToString())
    Console.WriteLine("Feedback Score: " + feedbackScore.ToString())
    Console.WriteLine()

Next


Answer 2:

序列化和JSON对象的反序列化是使用JSON字符串和JSON对象更好的办法。 这Json的转换器是最适合这样的操作。 只要反序列化JSON对象到C#或VB实例,你将获得所有属性。



Answer 3:

有没有必要使用字符串替换就像你做了操纵JSON本身。

最彻底的方法是创建一个C#类相同的字段您解析和亚伦提到反序列化到JSON的。 这使得结果更容易使用。

另外,您可以利用LINQ到JSON或动态做类似你原来的答案,而又没有操纵JSON本身。

LINQ到JSON: http://james.newtonking.com/json/help/index.html?topic=html/LINQtoJSON.htm

动态: http://james.newtonking.com/json/help/index.html?topic=html/QueryJsonDynamic.htm



文章来源: JSON.NET Dynamic Parsing (More Efficient Solution)