C# 如何从n1ql查询遍历JSON数组?
所以我使用couchbase队列将我的信标信息排入队列。我正在尝试使用n1ql查询作为我的get方法,但在获取所有信息时遇到了问题。我意识到我只得到第一个信标条目,因为result.Rows返回一个元素,一个BeaconInfo 1ql数组。我想遍历该数组并将每个数组添加到列表中C# 如何从n1ql查询遍历JSON数组?,c#,.net,json,parsing,couchbase,C#,.net,Json,Parsing,Couchbase,所以我使用couchbase队列将我的信标信息排入队列。我正在尝试使用n1ql查询作为我的get方法,但在获取所有信息时遇到了问题。我意识到我只得到第一个信标条目,因为result.Rows返回一个元素,一个BeaconInfo 1ql数组。我想遍历该数组并将每个数组添加到列表中 try { var cluster = new Cluster(new ClientConfiguration()); using (var bucket = cluster.OpenBucket(
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;
我不确定如何使第二个foreach/for循环遍历所有键 对于迭代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赋予字符串。我认为其中一个原因可能是因为json有两个括号“{{”而不是一个?我不能使用split(),因为result是iQueryResult,而它没有split函数。
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);