【问题标题】:Storing JSON array in different lists or arrays将 JSON 数组存储在不同的列表或数组中
【发布时间】:2018-07-09 05:46:47
【问题描述】:
{
    "status": true,
    "message": [
        {
            "ID": 1,
            "TFrom": "b",
            "TTo": "c"
        },
        {
            "ID": 2,
            "TFrom": "b",
            "TTo": "c"
        },
        {
            "ID": 3,
            "TFrom": "b",
            "TTo": "c"

       }
    ]
}

这是我的 JSON 结果,我使用的是 Android/Java,我想要将 "message" 数组中的每个对象分隔在一个数组中,因为它们中的每一个都应该在一个列表项中。 这意味着我的ListView 将查看列表中的"message" 内容。 更像是这样的:

list1= [{"ID": 1, "TFrom": "b", "TTo": "c"}] 
list2= [{"ID": 2, "TFrom": "b", "TTo": "c"}] 

【问题讨论】:

  • 您确定要让每个“列表”成为一个仅包含一项的数组吗?
  • @christopher_pk 也许我没有说明我需要什么,但 ListView 中的每个列表项都应该有一个包含 ID、TFrom 和 TTo 的 json 对象
  • @Nuha:那么问题是什么?创建一个数组的 ArrayList
  • @Nuha 如果您愿意使用第三方库,您可以使用 Gson by Google。我正在为您制定一个可行的解决方案,请给我几分钟时间
  • @Nuha 看看我的回答。您可以为类指定任何名称,但不要更改变量的名称,因为 Gson 将值键映射到相同名称的变量。 like status : true 将映射到 MessageObject 类中的布尔状态。

标签: java android json listview


【解决方案1】:

消息对象类:

public class MessagesObject {
    boolean status;
    List<AMessage> message;

    public List<AMessage> getMessage() {
        return message;
    }

    public void setMessage(List<AMessage> message) {
        this.message = message;
    }

    public boolean isStatus() {

        return status;
    }

    public void setStatus(boolean status) {
        this.status = status;
    }


}

AMessage 类:

public class AMessage {
    int ID;
    String TFrom;
    String TTo;

    public int getID() {
        return ID;
    }

    public void setID(int ID) {
        this.ID = ID;
    }

    public String getTFrom() {
        return TFrom;
    }

    public void setTFrom(String TFrom) {
        this.TFrom = TFrom;
    }

    public String getTTo() {
        return TTo;
    }

    public void setTTo(String TTo) {
        this.TTo = TTo;
    }
}

用法:

String json="you json string";
MessagesObject messagesObject = new Gson().fromJson(jsonToParse, MessagesObject.class);

参考格森:

implementation 'com.google.code.gson:gson:2.8.2'

输出:

【讨论】:

  • 你可以给类起任何名字,但不要改变变量的名字,因为 Gson 将值键映射到同名的变量。 like status : true 将映射到 MessageObject 类中的布尔状态
【解决方案2】:

我不确定您真正想要什么,但如果您真的想将数组转换为数组列表,即。

[1, 2, 3] => [[1], [2], [3]]

您可以将此代码作为起点。

    List<List<T>> YOUR_LIST_OF_LISTS = message.stream().map((e) -> {
        ArrayList<T> temp = new ArrayList<>();
        temp.add(e);
        return temp;
    }).collect(Collectors.toList());

用你想要的一些数据类型替换 T,在你的情况下可能是 JSONObject。

不是 android 特定的,只是 java 代码。我不确定你为什么想做这样的事情。如果这不是您想要的,请在下方评论。

【讨论】:

    【解决方案3】:
     JSONObject heroObject = data.getJSONObject("favorite");
    JSONArray jarray=heroObject.getJSONArray("message");
    ArrayList<HashMap<String,String>> array=new ArrayList<>();
                            //now looping through all the elements of the json array 
                            for (int i = 0; i < jarray.length(); i++) {
                                //getting the json object of the particular index inside the array
                              JSONObject heroObject = jarray.getJSONObject(i);
    HashMap<String,String> inner=new HashMap<String, String>();
    inner.put("id", heroObject.getString("ID"));
    inner.put("from", heroObject.getString("TFrom"));
    inner.put("to", heroObject.getString("TTo"));
                                  array.add(inner);
    
                            }
    

    【讨论】:

      【解决方案4】:

      使用 gson 库。查看下面如何在项目中实施。

      build.gradle

      implementation 'com.google.code.gson:gson:2.7'
      

      然后创建 MessageModel.java 和 MessageBaseModel.java。

      MessageModel.java

      public class MessageModel {
      @SerializedName("ID")
      int id;
      
      @SerializedName("TFrom")
      String tFrom;
      
      @SerializedName("TTo")
      String tTo;
      
      public int getId() {
          return id;
      }
      
      public void setId(int id) {
          this.id = id;
      }
      
      public String gettFrom() {
          return tFrom;
      }
      
      public void settFrom(String tFrom) {
          this.tFrom = tFrom;
      }
      
      public String gettTo() {
          return tTo;
      }
      
      public void settTo(String tTo) {
          this.tTo = tTo;
      }
      }
      

      MessageBaseModel.java

      public class MessageBaseModel {
      @SerializedName("status")
      boolean status;
      
      @SerializedName("message")
      ArrayList<MessageModel> messageModels = new ArrayList<>();
      
      public boolean isStatus() {
          return status;
      }
      
      public void setStatus(boolean status) {
          this.status = status;
      }
      
      public ArrayList<MessageModel> getMessageModels() {
          return messageModels;
      }
      
      public void setMessageModels(ArrayList<MessageModel> messageModels) {
          this.messageModels = messageModels;
      }
      }
      

      在您的主要活动中使用以下代码:(注意:结果是您的 JSON 结果)

      MessageBaseModel messageBaseModel=new Gson().fromJson(result.toString() , MessageBaseModel.class);
      ArrayList<MessageModel> messageModels =  MessageBaseModel.getMessageModels();
      

      查看下面的示例以获取输出:

      messageModels.get(0) is your first message object
      
      messageModels.get(0).getId()=1
      
      messageModels.get(0).gettFrom()=b
      
      messageModels.get(1).getId()=2
      
      messageModels.get(2).getId()=3
      

      对不起我的英语。

      【讨论】:

      • @Nuha 请查看我的回答。
      【解决方案5】:

      试试这个

          List<Map<String,String>> list = new ArrayList<>();
          try
          {
              JSONArray messageArray = response.getJSONArray("message");
              for (int i = 0;i<messageArray.length(); i++)
              {
                  Map<String,String> map = new HashMap<>();
                  JSONObject jsonObject = messageArray.getJSONObject(i);
                  Iterator<String> keys = jsonObject.keys();
                  while (keys.hasNext())
                  {
                      String key = keys.next();
                      String value = jsonObject.getString(key);
                      map.put(key,value);
                  }
                  list.add(map);
              }
          }
          catch (JSONException e) 
          {
              e.printStackTrace();
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-19
        • 2020-02-04
        • 2012-10-30
        • 1970-01-01
        • 1970-01-01
        • 2019-10-26
        相关资源
        最近更新 更多