【问题标题】:How to iterate through JSON array from n1ql query?如何从 n1ql 查询中遍历 JSON 数组?
【发布时间】:2017-04-07 14:27:03
【问题描述】:

所以我正在使用 couchbase 队列来排队我的信标信息。我正在尝试对我的 get 方法使用 n1ql 查询,但我无法获取所有信息。我意识到我只得到了第一个信标条目,因为 result.Rows 返回一个元素,一个 BeaconInfoN1ql 数组。我想遍历该数组并将每个数组添加到列表中。

try {
     var cluster = new Cluster(new ClientConfiguration());
     using (var bucket = cluster.OpenBucket("BeaconInfoN1ql"))
     {
         string query = "SELECT * FROM `BeaconInfoN1ql`";
         var queryRequest = new QueryRequest(query);
         var result = bucket.Query<dynamic>(queryRequest);
     foreach (var row in result.Rows)
      {

          int i = 0;
          var beacon = new Beacon()
          {
              SerialNumber = row.BeaconInfoN1ql[i].serialNumber,
              ReceivedDate = Convert.ToDateTime(row.BeaconInfoN1ql[i].receivedDate),
              ReceiverId = row.BeaconInfoN1ql[i].receiverId,
              Distance = Convert.ToDouble(row.BeaconInfoN1ql[i].distance),
              Rssi = Convert.ToInt32(row.BeaconInfoN1ql[i].rssi),
              NewDistance = Convert.ToDouble(row.BeaconInfoN1ql[i].newDistance),
              DistanceTesting = Convert.ToDouble(row.BeaconInfoN1ql[i].distanceTesting),
          };
          i++;
          _beaconsList.Add(beacon);
      }
 }
 return _beaconsList;

我的结果。行看起来像这样

result.Rows=

{{
"BeaconInfoN1ql": [
{
"distance": 2.2705747109792007,
"distanceTesting": 22,
"newDistance": 22,
"receivedDate": "0001-01-01T00:00:00",
"receiverId": "42008780c4b9b329",
"rssi": -73,
"serialNumber": "888"
},
{
"distance": 2.2705747109792007,
"distanceTesting": 22,
"newDistance": 22,
"receivedDate": "0001-01-01T00:00:00",
"receiverId": "42008780c4b9b329",
"rssi": -73,
"serialNumber": "888"
},
{
"distance": 2.2705747109792007,
"distanceTesting": 22,
"newDistance": 22,
"receivedDate": "0001-01-01T00:00:00",
"receiverId": "42008780c4b9b329",
"rssi": -73,
"serialNumber": "888"
},
{
"distance": 2.2705747109792007,
"distanceTesting": 22,
"newDistance": 22,
"receivedDate": "0001-01-01T00:00:00",
"receiverId": "42008780c4b9b329",
"rssi": -73,
"serialNumber": "888"
},
]
}}

我不确定如何使第二个 foreach/for 循环遍历所有键。

【问题讨论】:

    标签: c# .net json parsing couchbase


    【解决方案1】:

    对于迭代 JSON,我喜欢使用动态。这是一个例子:

    var result = new Result()
    {
        Rows = @"{
            'BeaconInfoN1ql': [
                {
                     'distance': 2.2705747109792007,
                     'distanceTesting': 22,
                     'newDistance': 22,
                     'receivedDate': '0001-01-01T00:00:00',
                     'receiverId': '42008780c4b9b329',
                     'rssi': -73,
                     'serialNumber': '888'
                }
            ]
        }" //other entries omitted for brevity
    };
    
    dynamic parsedRows = JsonConvert.DeserializeObject(result.Rows);
    foreach (var entry in parsedRows.BeaconInfoN1ql)
        Debug.Write(entry.distance);
    

    注意:在我的示例中,我从您的输出中去掉了双花括号。

    【讨论】:

    • 我试过了,我无法反序列化 result.Rows,它将 System.Collections.Generic.List 提供给 string 。我认为原因之一可能是因为json有两个括号'{{'不是一个?我不能使用 split() 因为 result 是 iQueryResult 并且没有 split 功能。
    猜你喜欢
    • 1970-01-01
    • 2020-11-06
    • 2018-10-05
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 2014-01-13
    • 2021-01-10
    相关资源
    最近更新 更多