2017-04-07 28 views
0

所以我使用couchbase隊列來排隊我的信標信息。我試圖用我的get方法使用n1ql查詢,並且無法獲取所有信息。我意識到我只獲取第一個信標條目,因爲result.Rows返回一個元素,一個BeaconInfoN1ql數組。我想遍歷該數組並將其添加到列表中。如何通過n1ql查詢遍歷JSON數組?

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看起來像這樣

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循環遍歷所有的鍵。

回答

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); 

注:我在我的例子擺脫雙花括號從你的輸出。

+0

我試過了,我無法反序列化result.Rows,它給System.Collections.Generic.List 字符串。我認爲其中一個原因可能是因爲json有兩個括號'{{'不是一個?我無法使用split(),因爲結果是iQueryResult ,並且沒有拆分功能。 – Iamasking88