JSON.. NET动态解析(更有效的解决方案)



所以我使用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":{}
}

这是我目前为止的代码…我想要得到results对象下user_id的值

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

所以我能够得到user_id的值,但我不认为这是最有效的方法。还有别的方法吗?非常感谢:)如果有人已经有代码,c#或VB。. NET就可以了,但是指导方针对我来说会很好,谢谢:)

使用JSON解析器时,不需要直接操作JSON字符串(这是解析器的工作),也不需要多次解析JSON(第一次解析时数据已经在内存中)。所以你是对的,你所做的并不是提取数据的最好方法。

下面是一个如何使用LINQ-to-JSON API(即JObjects/JTokens)从JSON中提取user_id和其他结果数据的示例。因为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

JSON对象的序列化和反序列化是使用JSON字符串和JSON对象的更好方法。这个Json转换器最适合这种操作。只需将JSON对象反序列化为c#或VB实例,就可以访问所有属性。

不需要像前面那样使用字符串替换来操作JSON本身。

最干净的方法是创建一个c#类,其字段与您正在解析和反序列化的JSON相同,正如Aaron所提到的。这使得结果更容易使用。

或者你可以利用LINQ to JSON或动态来做类似于你原始答案的事情,而不需要操纵JSON本身。

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

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

相关内容

  • 没有找到相关文章

最新更新