Json to Java Mapping

纵然是瞬间 提交于 2021-01-27 20:46:01

问题


I want to map below Json data to java object of List<Map<String, String>> type.

Sample Json:

{ 
  {
    a:b,
    c:d
  },
  {
    e:f,
    g:h,
    i:j
  },
  { 
   h:k
  }
}

Here a:b represents key-value pair. So a:b and c:d will be mapped to first map of the list and so on. one way to do this is by building JSON tree and access each node and store the pair into the map.

Is there a better way to do this (cleaner approach)?


回答1:


Here is the code to read a List<Map<String, String>> using the Jackson library, with your example data as input:

public class JsonTest {
public static void main(String[] args) throws Exception {
    final String json
        = "[\n"
        + "    {\n"
        + "        \"a\":\"b\",\n"
        + "        \"c\":\"d\"\n"
        + "    },\n"
        + "    {\n"
        + "        \"e\":\"f\",\n"
        + "        \"g\":\"h\",\n"
        + "        \"i\":\"j\"\n"
        + "    },\n"
        + "    {\n"
        + "        \"h\":\"k\"\n"
        + "    }\n"
        + "]"; // [{a:b,c:d},{e:f,g:h,i:j},{h:k}]   
    ObjectMapper mapper = new ObjectMapper();
    TypeFactory factory = TypeFactory.defaultInstance();
    List<Map<String, String>> list = mapper.readValue(json,factory
        .constructCollectionType(List.class, factory
                .constructMapType(Map.class, String.class, String.class)));
    System.out.println(list.toString());
}
}

Note: I had to fix your outermost braces from {} to [], which is the correct JSON list syntax.




回答2:


You can use Jackson to achieve this task through below example code

public class JacksonExample {
public static void main(String[] args) {

    ObjectMapper mapper = new ObjectMapper();

    try {

        // Convert JSON string from file to Object
        User user = mapper.readValue(new File("C:\\user.json"), User.class);
        System.out.println(user);

        // Convert JSON string to Object
        String jsonInString = "{\"age\":33,\"messages\":[\"msg 1\",\"msg 2\"],\"name\":\"xyz\"}";
        User user1 = mapper.readValue(jsonInString, User.class);
        System.out.println(user1);

    } catch (JsonGenerationException e) {
        e.printStackTrace();
    } catch (JsonMappingException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

}




回答3:


First I made few changes to your json to make it valid

{
"key": 
    [{
        "a": "b",
        "c": "d"
    },
    {
        "e": "f",
        "g": "h",
        "i": "j"
    }, 
    {
        "h": "k"
    }]

}

Please find the below code that I have tried out :

ObjectMapper mapper = new ObjectMapper();
ObjectNode objectNode1 = mapper.createObjectNode();
Map<String, Object> i = mapper.readValue(new File("J:/temp/sample.json"), Map.class);
System.out.println(i.get("key"));
System.out.println(i.values());

Output :

//For System.out.println(i.get("key"));

[{a=b, c=d}, {e=f, g=h, i=j}, {h=k}]

//For System.out.println(i.values());

[[{a=b, c=d}, {e=f, g=h, i=j}, {h=k}]]

If the above approach helps you, Make a right decision based on your needs either i.get("key") or i.values()




回答4:


Just use gson library to Json to object and object to Json

import java.lang.reflect.Type;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

Object to Json

Gson gson = new Gson();
Student obj=new Student();
String jsonInString = gson.toJson(obj);

Json To Object

Student obj = gson.fromJson(jsonInString, Student.class);


来源:https://stackoverflow.com/questions/40628324/json-to-java-mapping

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!