谁能告诉我如何遍历JSONArray
并在其中返回JSONArray
和JSONObject
。
我尝试了以下代码,但出现如下错误。
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of 'com.example.jsonarr.pojoClass[]' out of START_OBJECT token
代码
List<pojoClass> pojoClassList = new ArrayList();
JSONArray jsonArrayList = new JSONArray( jsonResponse );
ObjectMapper objectMapper = new ObjectMapper( );
pojoClassList = (List)objectMapper.readValue(jsonArrayList.toString(),
objectMapper.getTypeFactory().constructCollectionType(List.class, pojoClass[].class));
JSONArray
[
{
"Key1": "Value1",
"Key2": "Value2",
"Key3": "Value3",
"Value1_tim": {
"amVal": 0,
"pmVal": "0"
}
},
[ {
"Key1": "Value1",
"Key2": "Value2",
"Key3": "Value3",
"Value1_tim": {
"amVal": 0,
"pmVal": "0"
}
}]
]
具有正常的for循环。
for ( int i = 0; i < jsonArrayList.length(); i++ ) {
JSONObject jsonObject = jsonArrayList.optJSONObject( i );
if ( jsonObject != null ) {
pojoClass = objectMapper.readValue( jsonObject.toString(), PojoClass.class );
}
if ( jsonObject == null ) {
JSONArray jsonArrayInner = new JSONArray( jsonArrayList.getJSONArray( i ).toString() );
for ( int j = 0; j < jsonArrayInner.length(); j++ ) {
JSONObject jsonObject1 = jsonArrayList.optJSONObject( j );
if ( jsonObject1 != null ) {
pojoClass = objectMapper.readValue( jsonObject1.toString(), PojoClass.class );
}
}
}
pojoClassList.add( pojoClass );
}
如何使用Java 8
来做到这一点?
答案 0 :(得分:0)
如果您使用Jackson
的{{1}},请尝试使用ACCEPT_SINGLE_VALUE_AS_ARRAY
功能,该功能允许将单个元素视为ObjectMapper
。在下面,您可以找到一个简单的示例,该示例如何将one-element-array
读取到JSON
类的列表中:
Pojo
上面的代码显示:
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.type.CollectionType;
import java.io.File;
import java.util.List;
import java.util.stream.Collectors;
public class JsonApp {
public static void main(String[] args) throws Exception {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
CollectionType collectionType0 = mapper.getTypeFactory().constructCollectionType(List.class, Pojo.class);
CollectionType collectionType1 = mapper.getTypeFactory().constructCollectionType(List.class, collectionType0);
List<List<Pojo>> list = mapper.readValue(jsonFile, collectionType1);
List<Pojo> pojos = list.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
System.out.println(pojos);
}
}
class Pojo {
@JsonProperty("Key1")
private String key1;
// getters, setters, toString
}