Java 将值从json字符串转换为对象

Java 将值从json字符串转换为对象,java,json,jackson,deserialization,json-deserialization,Java,Json,Jackson,Deserialization,Json Deserialization,我有一个JSON格式的有效负载,每个值都有一个带有单个map元素的列表: { "redundant_str_1": [ { "attr_1": "val1", "attr_2": "val2" } ], "rendundant_str_2": [ { "attr_1": "va

我有一个
JSON
格式的有效负载,每个值都有一个带有单个map元素的列表:

{
  "redundant_str_1": [
    {
      "attr_1": "val1",
      "attr_2": "val2"
    }
  ],
  "rendundant_str_2": [
    {
      "attr_1": "val4",
      "attr_2": "val3"
    }
  ]
}
模型为:

public class MyObj {

     private String attr_1;
     private String attr_2;
}

通过忽略键并仅从列表中提取元素,如何将上述响应映射到
List

您可以使用
Jackson
(将依赖项添加到
Jackson core
Jackson databind
):

String json = "{\"redundant_str_1\": [{\"attr_1\": \"val1\", \"attr_2\": \"val2\"}], \"rendundant_str_2\": [{\"attr_1\": \"val4\", \"attr_2\": \"val3\"}]}";
ObjectMapper objectMapper = new ObjectMapper();
List<MyObj> myObjList = new ArrayList<>();

ObjectNode objectNode = (ObjectNode) objectMapper.readTree(json);
    for (Iterator<JsonNode> it = objectNode.elements(); it.hasNext(); ) {
        ArrayNode arrayNode = (ArrayNode) it.next();
        MyObj myObj = objectMapper.treeToValue(arrayNode.get(0),MyObj.class);
        myObjList.add(myObj);
    }
System.out.println("List : " + myObjList);

您的答复是
Map
格式。您可以将其反序列化为给定类型,然后将其转换为
列表


您也可以将json转换为HashMap列表。好主意
   List : [MyObj{attr_1='val1', attr_2='val2'}, MyObj{attr_1='val4',attr_2='val3'}]
  String json = "[" +
                "{\"attr_1\": \"val1\", \"attr_2\": \"val2\"}, " +
                "{\"attr_1\": \"val4\", \"attr_2\": \"val3\"}"
                + "]";

  ObjectMapper mapper = new ObjectMapper();
  mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
  List<MyObj> list = Arrays.asList(mapper.readValue(json, MyObj[].class));
mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.json.JsonMapper;
import lombok.Data;
import lombok.ToString;

import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class MyObjApp {
    public static void main(String[] args) throws IOException {
        File jsonFile = new File("./resource/test.json").getAbsoluteFile();

        ObjectMapper mapper = JsonMapper.builder().build();
        TypeReference<Map<String, List<MyObj>>> respType = new TypeReference<Map<String, List<MyObj>>>() {};
        Map<String, List<MyObj>> response = mapper.readValue(jsonFile, respType);

        List<MyObj> myObjs = response.values().stream().flatMap(Collection::stream).collect(Collectors.toList());
        System.out.println(myObjs);
    }
}

@Data
@ToString
class MyObj {

    private String attr_1;
    private String attr_2;
}
[MyObj(attr_1=val1, attr_2=val2), MyObj(attr_1=val4, attr_2=val3)]