所以我使用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_id
对象下获得results
的值。
Dim p1 = JObject.Parse(json)
Dim p2 = JObject.Parse(p1("results").ToString.Replace("[", "").Replace("]", ""))
MsgBox(p2("user_id"))
所以我能够获得user_id
的价值,但我不认为这是最有效的方式。{p>还有另一种方法吗?非常感谢:)如果有人已经有代码,C#或VB.NET会这样做,但指南对我来说也没关系,谢谢:)
答案 0 :(得分:1)
JSON对象的序列化和反序列化是使用json字符串和JSON对象的更好方法。这Json converter最适合此类操作。只需将JSON对象反序列化为C#或VB实例,您就可以访问所有属性。
答案 1 :(得分:1)
使用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
答案 2 :(得分:0)
没有必要像你所做的那样使用字符串替换来操纵JSON本身。
最干净的方法是创建一个C#类,其字段与您正在解析和反序列化的JSON相同,如Aaron所述。这使得结果更容易使用。
或者,您可以利用LINQ to JSON或动态来执行与原始答案类似的操作,而无需操纵JSON本身。
LINQ to 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