【问题标题】:Convert JSON into List of Object property (Java)将 JSON 转换为对象属性列表 (Java)
【发布时间】:2018-10-14 13:11:32
【问题描述】:

我有一个简单的 json,看起来像这样:

[  
  {  
    "id":"0",
    "name":"Bob",
    "place":"Colorado",
  },
  {  
    "id":"1",
    "name":"John",
    "place":"Chicago",
  },
  {  
    "id":"2",
    "name":"Marry",
    "place":"Miami",
  }
]

我想要的是使用 Java 创建包含所有“名称”的字符串列表 (List<String>)。我有一些使用 Gson 的经验,我想到了类似的东西:

Gson gson = new Gson();
String[] stringArray= gson.fromJson(jsonString, " ".class);

这个方法的问题是我应该创建一些我在这种情况下没有的 POJO 类。在不使用此“名称”属性创建单独的类的情况下,我有什么方法可以实现它吗?

【问题讨论】:

  • 你尝试过什么?有吨库将 json 映射到 pojo 对象。
  • 我投票结束这个问题作为题外话,因为没有任何努力,没有研究。请在此处发布要求之前先尝试一下。
  • 我尝试过使用 Gson,但也许我错过了可以帮助我的正确功能
  • 也许我们可以告诉您edit您的问题是否与您的尝试有关。请参阅How to Ask。 (你不是 SO 的菜鸟……你应该知道这一点)。
  • 嗨@Alle3x,请至少把您尝试过的代码示例放在哪里?如果没有任何开始,我们无法完全帮助您..对不起..

标签: java json


【解决方案1】:

你可以试试下面的代码sn-p,

    import org.json.simple.JSONArray;
    import org.json.simple.JSONObject;
    import org.json.simple.parser.JSONParser;
    import org.json.simple.parser.ParseException;

        List<String> ls = new ArrayList<String>();
        JSONObject jsonObj = new JSONObject();
        JSONArray jsonArr = new JSONArray();
        JSONParser jsonParse = new JSONParser();

        String str =  "[{\"id\": \"0\",\"name\": \"Bob\",\"place\": \"Colorado\"},"
                + "{\"id\": \"1\",\"name\": \"John\",\"place\": \"Chicago\"},"
                + "{\"id\": \"2\",\"name\": \"Marry\",\"place\": \"Miami\"}]";
        try {
            jsonArr= (JSONArray) jsonParse.parse(str); //parsing the JSONArray
            if(jsonArr!=null){
                int arrayLength =jsonArr.size(); //size is 3 here
                for(int i=0;i<arrayLength;i++){
                    jsonObj = (JSONObject) jsonParse.parse(jsonArr.get(i).toString());
                    ls.add(jsonObj.get("name").toString()); //as we need only value of name into the list
                }
                System.out.println(ls);
            }

        } catch (ParseException e) {
            e.printStackTrace();
        }catch(Exception e1){
            e1.printStackTrace();
        }

由于您有数组,请使用 JSONArray 并使用 jsonParse 以避免任何解析错误。 我已经使用 json-simple API 来实现上述目标。

【讨论】:

    【解决方案2】:

    您可以使用 JSONArray 从键“名称”中获取值。像这样:

    JSONArray jSONArray = new JSONArray(yourJson);
    List<String> list = new ArrayList<>();
    for (int i = 0; i < jSONArray.length(); i++) {
      JSONObject object = (JSONObject) jSONArray.get(i);
      String value = object.getString("name");
      System.out.println(value);
      list.add(value);
    }
    

    【讨论】:

      【解决方案3】:

      使用Jackson 解析,Java 8 Streams API 只提取名称字段;以下内容可能对您有所帮助:

      // Your string
      jsonString = "[{ \"id\":\"0\", \"name\":\"Bob\", \"place\":\"Colorado\" }, { \"id\":\"1\", \"name\":\"John\", \"place\":\"Chicago\"}, { \"id\":\"2\", \"name\":\"Marry\", \"place\":\"Miami\" }]";
      // using Jackson to parse
      ObjectMapper objectMapper = new ObjectMapper();
      objectMapper.getTypeFactory();
      List<MyInfo> myObjectList = objectMapper.readValue(jsonString, typeFactory.constructCollectionType(List.class, MyInfo.class));
      
      // Java 8 Collections
      List<String> nameList = myObjectList.stream().map(MyInfo::getName).collect(Collectors.toList());
      

      请注意,这意味着使用 MyInfo 类来代表您的 Json 对象适合的 Java 类。

      【讨论】:

        猜你喜欢
        • 2021-11-02
        • 1970-01-01
        • 1970-01-01
        • 2019-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多