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

时间:2017-04-07 14:27:04

标签: c# .net json parsing couchbase

所以我使用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 :(得分: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);

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