【问题标题】:Get JObject based on Seq value inside the JObject根据 JObject 内部的 Seq 值获取 JObject
【发布时间】:2016-12-31 19:52:51
【问题描述】:

我有一个平面文件系统(具有固定长度的字段定义 - 我无法更改这个遗留系统),其中序列顺序对于写入平面文件很重要。我正在尝试根据 JObject 中的序列值获取 JObject。我有以下 JSON 对象:

{
    APPOINTMENT_ID: {
        value: '',
        seqPos: 1,
        dbSize: 2,
        dbType: 'C',
        xpath: 'DataSet0'   
        },
    NAME: {
        value: '',
        seqPos: 2,
        dbSize: 30,
        dbType: 'C',
        xpath: 'DataSet1'
    },
    DATE: {
        value: '',
        seqPos: 3,
        dbSize: 10,
        dbType: 'M',
        xpath: 'DataSet2'
    }
}

目前我正在遍历索引和 JSON 以进行匹配,然后设置 JOBject。

JObject joOuter = null;
for (int i = 1; i <= joNode.Count; i++)
{
    foreach (var jT in joNode)
    {
        if (i == jT.Value["seqPos"].Value<int>())
        {
            joOuter = jT.Value.Value<JObject>();
            break;
        }
    }
    // Do Work on the JObect
    joOuter["value"] = "doProcess";
}

我想在 1 个循环而不是当前的嵌套代码中执行此操作,而不更改整个 JSON 并将键重新设置为序列位置。

【问题讨论】:

    标签: c# json json.net .net-core


    【解决方案1】:

    我会将这些 JObject 复制到字典中...

    var jObj = JObject.Parse(jsonstr);
    var dict = jObj.Properties().Select(x => x.Value)
                   .ToDictionary(x => (int)x["seqPos"], x => x);
    
    //loop or access the objects by their index
    dict[2]["value"] = "somevalue";
    
    //see, jObj is changed accordingly....
    var debug = jObj.ToString(Newtonsoft.Json.Formatting.Indented);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-29
      • 1970-01-01
      • 1970-01-01
      • 2022-06-27
      • 1970-01-01
      • 2018-06-18
      • 2021-03-14
      相关资源
      最近更新 更多