首页 > 解决方案 > 在 C# 中查找 Json 数组中的特定项目

问题描述

我有一个 json 文件,我想在其中搜索设备(例如 AEVL2020),并将根据“寄存器”返回多个结果。我试图在网上搜索,但没有找到任何线索。所以我想要这样的输出:

 "12":{
                "user_id": "1",
                "employee_id": "12",
                "name": "Juan Dela Cruz",
                "privilege": "0"
            },
            "32":{
                "user_id": "2",
                "employee_id": "32",
                "name": "Pedro Dela Cruz",
                "privilege": "0"
            }

这是我的json:

{
        "devices": {
            "AEVL2020":{
                "deviceSerialId": "AEVL2020"
            },
            "AEVL2021":{
                "deviceSerialId": "AEVL2021"
            }
        },
        "registers":{
            "AEVL2020":{
                "12":{
                    "user_id": "1",
                    "employee_id": "12",
                    "name": "Juan Dela Cruz",
                    "privilege": "0"
                },
                "32":{
                    "user_id": "2",
                    "employee_id": "32",
                    "name": "Pedro Dela Cruz",
                    "privilege": "0"
                }
            },
            "AEVL2021":{
                "29":{
                    "user_id": "1",
                    "employee_id": "29",
                    "name": "Maria Dela Cruz",
                    "privilege": "0"
                },
                "222":{
                    "user_id": "2",
                    "employee_id": "222",
                    "name": "Jay Dela Cruz",
                    "privilege": "0"
                }
            }
        }
    }

标签: c#json

解决方案


使用 Newtonsoft.Json

var json = JObject.Parse("{\"devices\":{\"AEVL2020\":{\"deviceSerialId\":\"AEVL2020\"},\"AEVL2021\":{\"deviceSerialId\":\"AEVL2021\"}},\"registers\":{\"AEVL2020\":{\"12\":{\"user_id\":\"1\",\"employee_id\":\"12\",\"name\":\"Juan Dela Cruz\",\"privilege\":\"0\"},\"32\":{\"user_id\":\"2\",\"employee_id\":\"32\",\"name\":\"Pedro Dela Cruz\",\"privilege\":\"0\"}},\"AEVL2021\":{\"29\":{\"user_id\":\"1\",\"employee_id\":\"29\",\"name\":\"Maria Dela Cruz\",\"privilege\":\"0\"},\"222\":{\"user_id\":\"2\",\"employee_id\":\"222\",\"name\":\"Jay Dela Cruz\",\"privilege\":\"0\"}}}}");

var devices = json.Value<JObject>("devices");
var registers = json.Value<JObject>("registers");

foreach (var device in devices)
{
    Console.WriteLine($"Device {device.Key}:");
    Console.WriteLine(registers[device.Value.Value<string>("deviceSerialId")]);
}

我有你想要的输出

Device AEVL2020:
{
  "12": {
    "user_id": "1",
    "employee_id": "12",
    "name": "Juan Dela Cruz",
    "privilege": "0"
  },
  "32": {
    "user_id": "2",
    "employee_id": "32",
    "name": "Pedro Dela Cruz",
    "privilege": "0"
  }
}

Device AEVL2021:
{
  "29": {
    "user_id": "1",
    "employee_id": "29",
    "name": "Maria Dela Cruz",
    "privilege": "0"
  },
  "222": {
    "user_id": "2",
    "employee_id": "222",
    "name": "Jay Dela Cruz",
    "privilege": "0"
  }
}

ps:可能你会从文件中读取json,所以将第一行替换为

var json = JObject.Parse(File.ReadAllText("file.json"));

推荐阅读