有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中将ArrayList转换为JSON对象

新手Java问题:我有ArrayList个值存储我的用户对象的属性,如下所示:

{"users":["Bob", 35, "230 Elm Street", "bob@website.com"]}

我的用户对象:

public class User{
    private String name;
    private int age;
    private String address;
    private String email;
    //getters & setters
}

我需要将这些值映射到它们各自的属性,以便返回正确的键/值JSON对象,如下所示:

["name": "Bob", "age": 35, "address": "230 Elm Street", "email": "bob@website.com"]

我对如何处理这个问题有点困惑;我是否需要使用Map在遍历列表时手动设置每个键,例如

for(User user : list){
    HashMap myMap = new HashMap();
    myMap.put("name", user.getName());
    myMap.setAge("age", user.getAge());
    //etc...

}
//Convert Map to JSON
return new JSONObject(myMap);

还是比这更简单?谢谢你的帮助


共 (4) 个答案

  1. # 1 楼答案

    最好的办法是学习Jackson序列化API。在封面下,Spring MVC使用了Jackson。你最好在谷歌上搜索杰克逊教程,并在https://github.com/FasterXML/jackson上查看官方文档

    请注意,如果您想调整JSON格式,那么可以向Java对象添加一些Jackson注释

  2. # 2 楼答案

    你可以使用Gson provided by google它会自动为你做这件事。还有其他各种解析器,如jackson、ig parser(instagram提供)。 下面是一个使用gson的示例

    public class DataObject {
    
        private int data1 = 100;
        private String data2 = "hello";
        private List<String> list = new ArrayList<String>() {
          {
            add("String 1");
            add("String 2");
            add("String 3");
          }
        };
    
        //getter and setter methods
    
        @Override
        public String toString() {
           return "DataObject [data1=" + data1 + ", data2=" + data2 + ", list="
            + list + "]";
        }
    
    }
    

    转换为json

    public class GsonExample {
        public static void main(String[] args) {
    
        DataObject obj = new DataObject();
        Gson gson = new Gson();
    
        // convert java object to JSON format,
        // and returned as JSON formatted string
        String json = gson.toJson(obj); 
        System.out.println(json);
    
        }
    }
    
  3. # 3 楼答案

    如果使用Spring MVC,则不需要了解JSON,它在@RestController中是透明的

    @RestController
    @RequestMapping("user")
    public class UserController {
        @RequestMapping
        public User getUser() {
         User user = new User();
         user.setName(...);
         return user;
        }
    }
    

    只需在maven中包括:

    <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>${jackson.version}</version>
    </dependency>
    
  4. # 4 楼答案

    首先,对于User对象的列表,JSON需要不同。其当前的表述如下所示

    {"users":[{"name": "Bob", "age": 35, "address": "230 Elm Street", "email": "bob@website.com"},{"name": "Bob1", "age": 40, "address": "2301 Elm Street", "email": "bob1@website.com"}]}
    

    要将这个json映射到List<User>,我们可以使用Jackson库中提供的ObjectMapper实现

     ObjectMapper mapper = new ObjectMapper();
     List<User> list2 = mapper.readValue(jsonString, TypeFactory.collectionType(List.class, User.class));
    

    阅读此Link以获取更多帮助