读取动态JSON属性

时间:2018-10-25 19:08:27

标签: json vb.net json.net

所以我目前正在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
  }
}

1 个答案:

答案 0 :(得分:0)

  

是否有一种清晰的方法可以分辨何时到达下一个物体?

是的,假设您使用的是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