[英]Java ArrayList<String> form comma-separated strings in square brackets
我正在调用一个端点,我得到的请求正文看起来像这样。
{"page":6,"name":"Fly","myList":["123","657","983","112"]}
所以我正在创建一个org.json.JSONObject像JSONObject 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 中的StringUtils 、 ArrayUtils 。 我似乎无法找到更好的解决方案。 有人能指出我正确的方向吗,谢谢。
实际上,您为什么不解析整个 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.