首页 文章

如何从n1ql查询迭代JSON数组?

提问于
浏览
0

所以我正在使用couchbase队列来排队我的信标信息 . 我正在尝试使用n1ql查询来获取我的get方法,但是我无法获取所有信息 . 我意识到我只获得了第一个信标条目,因为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循环迭代所有键 .

1 回答

  • 0

    对于迭代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);
    

    注意:在我的示例中,我从输出中删除了双花括号 .

相关问题