为了账号安全,请及时绑定邮箱和手机立即绑定

使用 JSON.Net 解析具有唯一字符串作为父级的 JSON 对象

使用 JSON.Net 解析具有唯一字符串作为父级的 JSON 对象

PHP
慕村9548890 2024-01-20 15:57:16
假设我有这个 JSON 示例:"Test": {        "KIf42N7OJIke57Dj6dkh": {            "name": "test 1"        },        "xsQMe4WWMu19qdULspve": {            "name": "test 2"        }}我想将其解析为我拥有的自定义类的数组,如下所示:class Class1 {    public string Name { get; set; }    Class1(string name) {        Name = name;    }}我如何使用 Json.NET 解析它JObject.Parse?
查看完整描述

2 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

您可以使用JPath查询来实现您的目标,如下所示:

var myArray = JObject

    .Parse(json)

    .SelectTokens("$.Test..name")

    .Values<string>()

    .Select(s => new Class1(s))

    .ToArray();

但可能不是最好的方法。


我个人更喜欢创建类来表示 json 结构,然后应用转换。


void Main()

{

    var json = @"{""Test"": {

        ""KIf42N7OJIke57Dj6dkh"": {

            ""name"": ""test 1""

            },

            ""xsQMe4WWMu19qdULspve"": {

            ""name"": ""test 2""

            }

    }

    }";


    var root = JsonConvert.DeserializeObject<Root>(json);

    var array = root.Test.Select(i => i.Value).ToArray();

    array.Dump();

}


public class Root

{

    public Dictionary<string, Class1> Test { get; set; }

}


public class Class1

{


    public string Name { get; set; }


    public Class1(string name)

    {

        Name = name;

    }

}


查看完整回答
反对 回复 2024-01-20
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

首先,您的 Json 缺少开始/结束大括号。Json 需要用大括号括住 Test 值。


{

    'Test': 

    {

            'KIf42N7OJIke57Dj6dkh': {'name': 'test 1'},

            'xsQMe4WWMu19qdULspve': {'name': 'test 2'}

    }

}

如果原始 Json 中缺少它,您可以将当前输入的 Json 包装如下。


var correctedJson = $"{{{inputJsonString}}}";

如果您想将 Json 对象解析为数组Class1 而不创建额外的具体数据结构并使用JPath Queries,您可以使用Json.Net 证明的DeserializeAnonymousTypeAnonymous Types方法来实现此目的。例如,

var sampleObject = new {Test = new Dictionary<string,Class1>()};

var data = JsonConvert.DeserializeAnonymousType(correctedJson,sampleObject);

var result = data.Test.Select(x=>x.Value).ToArray();

您还可以使用 JPath 查询或创建具体数据结构作为@Kalten 来实现它,如他的答案中所述。


查看完整回答
反对 回复 2024-01-20
  • 2 回答
  • 0 关注
  • 83 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信