读取动态JSON属性



所以我目前正在Visual Studio中使用JSON.NET来解析我的JSON,因为使用反序列化太慢了。我正在从TD Ameritrade获取股票信息,可以同时请求多个股票。下面的JSON结果来自于仅提取1。正如你所看到的,第一行是"TQQQ"。如果我要拉多只股票,我会有"TQQQ",然后在代表不同对象的单独块中有"CEI"。

在正常的反序列化下,我可以说反序列化一个字典,它会用我为它编写的任何类将它们相应地放入字典中。然而,由于我需要逐行解析,有没有一种干净的方法可以告诉我何时到达下一个对象?

我可以说跟踪最后一个字段,然后将下一行(下一个股票代码的名称(添加到字典中,但这似乎有点麻烦。

我认为除了创建一个新的JSONReader的初始启动之外,没有任何VB代码是必要的。

{
"TQQQ": {
"assetType": "ETF",
"symbol": "TQQQ",
"description": "ProShares UltraPro QQQ",
"bidPrice": 54.59,
"bidSize": 200,
"bidId": "Q",
"askPrice": 54.6,
"askSize": 8000,
"askId": "Q",
"lastPrice": 54.6,
"lastSize": 100,
"lastId": "P",
"openPrice": 51.09,
"highPrice": 54.6,
"lowPrice": 50.43,
"bidTick": " ",
"closePrice": 48.92,
"netChange": 5.68,
"totalVolume": 14996599,
"quoteTimeInLong": 1540493136946,
"tradeTimeInLong": 1540493136946,
"mark": 54.6,
"exchange": "q",
"exchangeName": "NASDAQ",
"marginable": true,
"shortable": true,
"volatility": 0.02960943,
"digits": 4,
"52WkHigh": 73.355,
"52WkLow": 38.6568,
"nAV": 0,
"peRatio": 0,
"divAmount": 0,
"divYield": 0,
"divDate": "2016-12-21 00:00:00.0",
"securityStatus": "Normal",
"regularMarketLastPrice": 54.6,
"regularMarketLastSize": 1,
"regularMarketNetChange": 5.68,
"regularMarketTradeTimeInLong": 1540493136946,
"delayed": true
}
}

有没有一种干净的方法可以告诉我何时到达下一个对象

是的,假设您使用的是JsonTextReader,您可以查看TokenType属性并检查它是否为StartObject。这对应于JSON中的大括号{。还有一个对应于大括号}EndObject标记类型,这可能也很有用,具体取决于代码的编写方式。

典型的使用模式是这样的:

If reader.TokenType == TokenType.StartObject Then
While reader.Read() AndAlso reader.TokenType <> JsonToken.EndObject
' process properties of the JSON object
End While
End If

最新更新