繁体   English   中英

在C#中从Json对象提取值

[英]Extracting a value from Json object in C#

我有一个Json文档,我试图获取每个通道从1到4的AnalogInput值。我已经尝试了以下代码:

 JObject originalObject = JObject.Parse(testJsonObject);
 var analogInputTrueValues = originalObject.Descendants().OfType<JProperty>().Where(p => p.Name == "DigitalInput").Select(x => x.Value).ToArray();

其中testJsonObject是通过其他方法加载的Json文件。

调试代码,analogInputTrueValues的值为:

{Newtonsoft.Json.Linq.JToken[4]}
    [0]: {13}
    [1]: {13}
    [2]: {14}
    [3]: {14}

,哪个是对的。 但我有一个像{“ 13”,“ 13”,“ 14”,“ 14”}这样的数组或列表的兴趣。 这是我无法前进的地方,因为我无法提取这些精确值并将它们存储在列表或数组中。 即使我这样做:

digitalInputTrueValues.GetValue(0)
{13}
    base: {13}
    HasValues: false
    Type: String
    Value: "13"

我无法提取我感兴趣的值。如何解决此类问题并提取所需的值? 我正在使用的对象如下:

{
        "module": {
            "serial": "3",
            "label": "A",
            "lat": "B",
            "long": "C",
            "channels": [
{"channel": "1", "label": "Channel 1", "AnalogInput": "13", "AnalogInputRaw": "13", "AnalogInputScale": "Raw", "DigitalInput": "Off"},
{"channel": "2", "label": "Channel 2", "AnalogInput": "13", "AnalogInputRaw": "13", "AnalogInputScale": "Raw", "DigitalInput": "On"},
{"channel": "3", "label": "Channel 3", "AnalogInput": "14", "AnalogInputRaw": "14", "AnalogInputScale": "Raw", "DigitalInput": "On"},
{"channel": "4", "label": "Channel 4", "AnalogInput": "14", "AnalogInputRaw": "14", "AnalogInputScale": "Raw", "DigitalInput": "On"}
            ],
            "variables": [
             {"1": "0"},
             {"2": "0"},
             {"3": "1"},
             {"4": "0"}
            ]
        }
}

您只需要在x.Value之后的Select表达式中包含ToString() x.Value

JObject originalObject = JObject.Parse(json);
var analogInputTrueValues = originalObject.Descendants()
                                          .OfType<JProperty>()
                                          .Where(p => p.Name == "AnalogInput")
                                          .Select(x => x.Value.ToString())
                                          .ToArray();

工作示例: https : //dotnetfiddle.net/tU5Mc8

使用强类型类的替代方法: https : //dotnetfiddle.net/US4Bs0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM