繁体   English   中英

Java ArrayList<string> 在方括号中形成逗号分隔的字符串</string>

[英]Java ArrayList<String> form comma-separated strings in square brackets

我正在调用一个端点,我得到的请求正文看起来像这样。

{"page":6,"name":"Fly","myList":["123","657","983","112"]}

所以我正在创建一个org.json.JSONObjectJSONObject repsonseObj = new JSONObject(repsonse.getBody());

我现在可以

(int)repsonseObj.get("page");
(String)repsonseObj.get("name");

我正在尝试将“myList”转换为 String 的 Java ArrayList 我可以使用JSONArray object 将其拉出,并使用 for 循环填充 ArrayList 的实例。 还尝试了以下使用 jackson.databind 的 ObjectMapper

    myListVar = mapper.readValue((String)repsonse.getString("myList"), new TypeReference<ArrayList<String>>(){}); 
//That gives an error saying "myList" is not a string. Surely I am missing something here.

我想保持数字的顺序 有没有更优雅的解决方案? 我尝试查看 java.lang 中的StringUtilsArrayUtils 我似乎无法找到更好的解决方案。 有人能指出我正确的方向吗,谢谢。

实际上,您为什么不解析整个 object 而不仅仅是列表?

public class MyClass {
    private Integer page;
    private String name;
    private List<String> myList;

    //getters, setters
}

这会将 JSON 解析为一个变量

MyClass myClass = objectMapper.readValue("{\"page\":6,\"name\":\"Fly\",\"myList\":[\"123\",\"657\",\"983\",\"112\"]}", MyClass.class);

编辑:

正如评论中所证明的那样,您需要 JSON 中的属性具有与 class 中不同的名称。 这可以通过使用@JsonProperty Ionut 建议的@JsonProperty 注释class 属性来轻松实现。 只需执行以下操作

import com.fasterxml.jackson.annotation.JsonProperty;

import java.util.List;

public class MyClass {
    @JsonProperty("page")
    private Integer otherNameThanPage;
    @JsonProperty("name")
    private String otherNameThanName;
    @JsonProperty("myList")
    private List<String> otherNameThanMyList;


    //getters, setters
}

这是序列化整个object的好方法,你已经得到了答案。


OR

你可以这样尝试

String json = (String)repsonse.getString("myList");
String[] array = objectMapper.readValue(json, new TypeReference<String[]>() {});

编辑:我添加了@aBnormaLz 的建议,它给出了相同的结果。

String json = (String)repsonse.getString("myList");
String[] array = objectMapper.readValue(json, String[].class);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM