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

3mpgtkmj  于 2021-07-23  发布在  Java
关注(0)|答案(2)|浏览(415)

我正在调用一个终结点,请求主体看起来是这样的。

{"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”转换成一个字符串的java数组列表。我可以使用jsonarray对象将其拉出,并使用for循环填充arraylist的示例。还尝试了下面使用objectmapper for jackson.databind执行的类似操作

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。我似乎找不到更好的解决办法。有人能给我指出正确的方向吗,谢谢。

p5fdfcr1

p5fdfcr11#

实际上,为什么不解析整个对象而不仅仅是列表呢?

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中的属性与类中的属性具有不同的名称。这可以通过使用 @JsonProperty 正如@dragos ionut所建议的。只需做以下操作

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
}
enxuqcxy

enxuqcxy2#

这是序列化整个对象的好方法,而且您已经得到了答案。 OR 您可以这样尝试:

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

编辑:我加上@z的建议,结果是一样的。

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

相关问题