在C#中重新格式化JSON

laik7k3q  于 2022-11-19  发布在  C#
关注(0)|答案(2)|浏览(235)

这里有一个JSON响应,

{
  "Items": [
    {
      "Key": {
        "timestamp": "2022-11-06T20",
        "value": 100.80
      }
    },
    {
      "Key": {
        "timestamp": "2022-11-07T08",
        "value": 100.90
      }
    }
  ]
}

我想重新格式化为:

{
  "Key": [
    {
      "timestamp": "2019-01-08T20",
      "value": 12.44
    },
    {
      "timestamp": "2018-12-12 16:23:00",
      "value": 12.45
    }
  ]
}

对于所有的响应,Key必须只在顶部一次,然后是一个时间戳和值的数组,并完全删除Items父值。我已经尝试过这样做,并在实现上做了一些手脚,但我一直收到多个不同的错误。这是正确的想法吗?或者有更好的实现方法吗?

JObject obj = JObject.Parse(jsonOutput);
        JObject newObj = new JObject();
        new JProperty("KEY", new JArray(
            .Children<JProperty>()
            .Select(j => new JObject(

                    new JProperty("timestamp", j.Value["timestamp"]),
                    new JProperty("value", j.Value["value"])
                    )
                )
           )
       );
       jsonOutput = newObj.ToString();

什么是正确的方法来实现这个想法?谢谢!

mo49yndu

mo49yndu1#

这可以很容易地通过结合

  1. SelectTokens()JSONPath万用字符运算子搭配使用,以选取所有必要的JSON对象。
    1.序列化匿名类型对象以创建所需的输出结构。
    因此:
var query = obj.SelectTokens("Items[*].Key");
jsonOutput = JsonConvert.SerializeObject(new { Key = query }, Formatting.Indented);

演示小提琴here

kmpatx3s

kmpatx3s2#

你 可以 在 一 行 中 修复 它

jsonOutput = new JObject {new JProperty("Key", ((JArray)JObject.Parse(jsonOutput)
["Items"]).Select(s => s["Key"]))}.ToString();

中 的 每 一 个

相关问题