所以我用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
,但我不认为这是做的最有效的方式。 是否有这样做的另一种方式? 非常感谢你:)如果有人已经拥有了代码,C#或VB.NET会做,但指南将只是做对我很好,谢谢:)
当使用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
序列化和JSON对象的反序列化是使用JSON字符串和JSON对象更好的办法。 这Json的转换器是最适合这样的操作。 只要反序列化JSON对象到C#或VB实例,你将获得所有属性。
有没有必要使用字符串替换就像你做了操纵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