【问题标题】:convert JSON Object to List<String>将 JSON 对象转换为 List<String>
【发布时间】:2017-03-27 23:01:30
【问题描述】:

我有以下 JSON 对象

 {"LIST":{"row_12":{"id":"11","name":"blah blah"},
"row_13":{"id":"8","name":"blah blah"},
"row_10":{"id":"3","name":"blah blah"},
"row_11":{"id":"14","name":"blah blah"},
"row_2":{"id":"27","name":"blah blah"},
"row_1":{"id":"2","name":"blah blah"},
"row_4":{"id":"23","name":"blah blah"},
"row_14":{"id":"43","name":"blah blah"},
"row_15":{"id":"35","name":"blah blah"},
"row_3":{"id":"36","name":"blah blah"},
"row_5":{"id":"30","name":"blah blah"},
"row_6":{"id":"34","name":"blah blah"},
"row_7":{"id":"17","name":"blah blah"},
"row_8":{"id":"37","name":"blah blah"},
"row_9":{"id":"1","name":"blah blah"}}} 

我想将它转换为列表我尝试了几个代码从与我的问题相似的问题的答案中,但是它们没有工作,我认为这是因为行中的每个对象都有它的名称。如何将对象转换为 List 。

【问题讨论】:

标签: android arrays json list


【解决方案1】:
JSONObject list = response.getJSONObject("LIST");
JSONObject rowOne = list.getJSONObject("row_12");
String id = rowOne.getString("id");
String name = rowOne.getString("name");

您遵循此过程 14 次,因为您的响应键值对不同。您应该向 kor 询问每行的 JSONArray inside list。 “响应”是您在异步接收方法中收到的 JSONObject。 希望能帮助到你。 [PS:您的问题在stackOverFlow 中是一种不好的做法。请check this link查看stackOverFlow的问题发布方法。] 干杯!

【讨论】:

  • 感谢伙伴,所以没有办法将所有这些对象放到一个 JSON 数组中?
  • 任何时候都可以。。向您发送漂亮的 JSONResponse 是服务器端的工作。您应该做的就是解析它。服务器向您发送一个非常业余的 json 响应。他/她没有使用 for 循环,而是编写了 15 行代码,可能是为了向您发送响应。干杯!
  • @Sanzhar,其他答案将使您能够在不改变服务器响应的情况下进行解析。我认为这不是一个好的做法,尤其是如果您想根据一个值做一件事,但它会适用于您当前的响应。
  • 明白,是的,我想人们可能会觉得我的问题不恰当,再次感谢
  • @Sanzhar,有点像,因为 JSON 响应有很多相同的问题。如果您完成了这个问题,请对两个答案进行投票,而不是接受一个,因为它们都是正确的。 :)
【解决方案2】:

您必须使用keys() 迭代器来获取所有属性,然后在每个对象上调用get()

Iterator<String> iter = json.keys();
while (iter.hasNext()) {
    String key = iter.next();
    try {
        Object value = json.get(key);
    } catch (JSONException e) {
        // went wrong!
    }
}

//这里json是“LIST”Json Object的对象。

这是供您参考的链接。 Iterating through JSONObject

【讨论】:

    【解决方案3】:

    我遇到了Thiago Passosthis article,它帮助我在 C# 中解决了这个问题

    鉴于以下 JSON:

    {
        "Bar1": {
            "Baz": "Baz1"
        },
        "Bar2": {
            "Baz": "Baz2"
        },
        "Bar3": {
            "Baz": "Baz3"
        },
        "Bar4": {
            "Baz": "Baz3"
        }
    }
    

    通常,这将解析为以下类:

    public class Foo
    {
        public Bar1 Bar1 { get; set; }
        public Bar2 Bar2 { get; set; }
        public Bar3 Bar3 { get; set; }
        public Bar4 Bar4 { get; set; }
    }
    
    public class Bar1 //Bar2, Bar3 & Bar4
    {
        public string Baz { get; set; }
    }
    

    我们想要的是解析为以下类:

    public class Foo
    {
        public List<Bar> Bars { get; set; }
    }
    

    为此,可以使用以下 JSON 转换器:

    public class BarConverter : JsonConverter
    {
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            writer.WriteStartArray();
            foreach (var bar in (List<Bar>) value)
            {
                writer.WriteRawValue(JsonConvert.SerializeObject(bar));
            }
            writer.WriteEndArray();
        }
    
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var response = new List<Bar>();
            JObject bars = JObject.Load(reader);
            foreach (var bar in bars)
            {
                var b = JsonConvert.DeserializeObject<Bar>(bar.Value.ToString());
                //b.Id = bar.Key;
                response.Add(b);
            }
    
            return response;
        }
    
        public override bool CanConvert(Type objectType) => objectType == typeof(List<Bar>);
    }
    

    更新Foo 类以使用转换器:

    public class Foo
    {
        [JsonConverter(typeof(BarConverter))]
        public List<Bar> Bars { get; set; }
    }
    

    最后,像往常一样反序列化 JSON:

    var foo = JsonConvert.DeserializeObject<Foo>(input);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-05
      • 1970-01-01
      相关资源
      最近更新 更多