将包含重复字段的对象转换为JSON [英] Convert object containing repeated fields to JSON

查看:210
本文介绍了将包含重复字段的对象转换为JSON的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在mysql dababase中有两个表countrycity,并且我查询返回诸如List<myDTO>这样的记录:

I have two table country and city in mysql dababase and i make a query to return records like that as List<myDTO> :

1,france,1,paris
1,france,2,marseille
1,france,3,lion
....

MyDTO

public class MyDTO {

    public Integer idLvl1;
    public String  nameLvl1;
    public Integer idLvl2;
    public String  nameLvl2;

    public MyDTO(Integer idLvl1, String nameLvl1, Integer idLvl2, String nameLvl2) {
        this.idNiv1 = idLvl1;
        this.nomNiv1 = nameLvl1;
        this.idNiv2 = idLvl2;
        this.nomNiv2 = nameLvl2;
    }

如何将其转换为json对象以避免重复的国家:

How can i convert it to json object to avoid the repeating country :

[ 
  {"idNiv1" :1,"nameLvl1":"France","cities":[{"idNiv2":1,"nameLvl2":"paris"}]} 
  {"idNiv1" :1,"nameLvl1":"France","cities":[{"idNiv2":2,"nameLvl2":"marseille"}]} 
  {"idNiv1" :1,"nameLvl1":"France","cities":[{"idNiv2":3,"nameLvl2":"lion"}]} 
  ....
]

[ 
  {
     "idNiv1" :1,
     "nameLvl1":"France",
     "cities":[
                { "idNiv2":1,"nameLvl2":"paris" } ,
                { "idNiv2":2,"nameLvl2":"marseille" } ,
                { "idNiv2":3,"nameLvl2":"lion" }
              ]
  }
  ....
]

推荐答案

为国家和城市创建其他类.将平面结构转换为国家和城市的嵌套结构,如下所示:

Create additional classes for country and city. Transform the flat structure to nested structure of country and cities as shown below:

public class Country {

    Integer idLvl1;
    String  nameLvl1;

    public Country(Integer idLvl1, String  nameLvl1) {
    }

    List<City> cities;

}

public class City {

    Integer idLvl2;
    String  nameLvl2;

    public City(Integer idLvl2, String  nameLvl2) {
    }
}

public class MyDTOConverter {

    public static Collection<Country> covert(List<MyDTO> dtos){
        Map<Integer, Country> countries = new LinkedHashMap<Integer, Country>();
        for (MyDTO myDTO : dtos) {
            //First adding the country if it doesn't exist
            if (!countries.containsKey(myDTO.idLvl1)){
                countries.put(myDTO.idLvl1, new Country(myDTO.idLvl1, myDTO.nameLvl1));
            }

            //Adding city in the existing country.
            countries.get(myDTO.idLvl1).cities.add(new City(myDTO.idLvl2, myDTO.nameLvl2));
        }

        return countries.values();
    }

}

最终的Country of Country将是所需的JSON.

The final Collection of Country will result is the desired JSON.

这篇关于将包含重复字段的对象转换为JSON的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆