【问题标题】:I need to rearrange a JSON but I cant find a solution我需要重新排列 JSON,但找不到解决方案
【发布时间】:2022-11-03 23:16:34
【问题描述】:

这是我正在接收的 JSON,已经过滤。 (它来自谷歌的地方自动完成API)

{
    "predictions": [
        {
            "description": "Frankfurt am Main, Deutschland",
            "place_id": "ChIJxZZwR28JvUcRAMawKVBDIgQ",
        },
        {
            "description": "Frankfurt (Oder), Deutschland",
            "place_id": "ChIJb_u1AiqYB0cRwDteW0YgIQQ",
        },
        {
            "description": "Frankfurt Hahn Flughafen (HHN), Lautzenhausen, Deutschland",
            "place_id": "ChIJX3W0JgQYvkcRWBxGlm6csj0",
        }
    ],
    "status": "OK"
}

我需要把这个 JSON 转换成这种格式:

{
   "success":true,
   "message":"OK",
   "data":[
      {
         "description":"Frankfurt Hahn Flughafen (HHN), Lautzenhausen, Deutschland",
         "id":"ChIJX3W0JgQYvkcRWBxGlm6csj0"
      },
      {
         "description":"Frankfurt Airport (FRA), Frankfurt am Main, Deutschland",
         "id":"ChIJeflCVHQLvUcRMfP4IU3YdIo"
      },
      {
         "description":"Frankfurt Marriott Hotel, Hamburger Allee, Frankfurt am Main, Deutschland",
         "id":"ChIJdag3xFsJvUcRZtfKqZkzBAM"
      }
   ]
}
I would be very g

所以预测只是重命名为“数据”,我们将重命名状态更改为消息,将其向上移动并添加成功,如果之前发生的 http-request 成功与否。这在第一次捕获时似乎并不难,但我似乎无法找到在 C# 中转换或重新排列 JSON 的资源。

我将非常感谢任何提示或资源,这样我就可以摆脱这个可能并不那么困难的任务。我应该提到我对这一切都很陌生。

谢谢大家!

【问题讨论】:

  • 这篇文章中对 cme​​ts 的类似指导:stackoverflow.com/q/74226455/1690217 通过序列化解决这个问题要简单得多。
  • 太感谢了!这正是我一直在寻找的。好像我也不能正确谷歌:^)

标签: c# json


【解决方案1】:

赞一下原来的jason,把数据移到新的json对象

  var origJsonObj = JObject.Parse(json);

    var fixedJsonObj = new JObject {
    new JProperty("success",true),
    new JProperty("message","OK"),
    new JProperty("data",origJsonObj["predictions"])
  };

    json = fixedJsonObj.ToString();

【讨论】:

    【解决方案2】:

    首先创建代表您的 json 的类

    public class Prediction
        {
            public string description { get; set; }
            public string place_id { get; set; }
        }
    
        public class InputJsonObj
        {
            public Prediction[] predictions { get; set; }
            public string status { get; set; }
        }
    
    
        public class Datum
        {
            public string description { get; set; }
            public string id { get; set; }
        }
    
        public class OutPutJsoObj
        {
            public bool success { get; set; }
            public string message { get; set; }
            public List<Datum> data { get; set; }
            public  OutPutJsoObj(){ 
             data = new List<Datum>();
            }
        }
    

    然后映射对象(手动或使用 AutoMapper 等任何映射库)并创建最终的 json。

    using Newtonsoft.Json;
    InputJsonObj inputObj = JsonConvert.DeserializeObject<InputJsonObj >(inputJson);
    OutPutJsoObj outObj = new OutPutJsoObj ();
    
    foreach(var p in inputObj)
    {
     outObj.Data.Add(new Datum() { descriptions = p.descriptions , id= p.place_id }
    }
    string outJson =  = JsonConvert.SerializeObject(outObj);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 2019-11-17
      • 1970-01-01
      相关资源
      最近更新 更多