使用java bean转换json格式

时间:2013-12-06 21:03:26

标签: java json

我有类似的json字符串

{"results":
[{"_type":"Position","_id":377078,"name":"Potsdam, Germany","type":"location","geo_position":{"latitude":52.39886,"longitude":13.06566}},
{"_type":"Position","_id":410978,"name":"Potsdam, USA","type":"location","geo_position":{"latitude":44.66978,"longitude":-74.98131}}]}

我正在尝试转换为

    {"results":
 [{"_type":"Position","_id":377078,"name":"Potsdam, Germany","type":"location","latitude":52.39886,"longitude":13.06566}, 
{"_type":"Position","_id":410978,"name":"Potsdam, USA","type":"location","latitude":44.66978,"longitude":-74.98131}]}

我正在转换为java并再次使用转换回来但是我在数据中使用null

  SourceJSON    data=new Gson().fromJson(jsonArray, SourceJSON.class);
           DestinationJSON destdata = new DestinationJSON();
           destdata.setLatitide(data.getGeoLocation().getLatitide());
           destdata.setLongitude(data.getGeoLocation().getLongitude());
           destdata.setId(data.getId());
           destdata.setType(data.getType());
           destdata.setName(data.getName());
           destdata.set_type(data.get_type());


           Gson gson = new Gson();
           String json = gson.toJson(destdata);
下面是我的豆子

public class SourceJSON implements Serializable {
    private List<GEOLocation> geoLocations;
    private String  _type;
    private String id;
    private String name;
    private String type;


    public String get_type() {
        return _type;
    }
    public List<GEOLocation> getGeoLocations() {
        return geoLocations;
    }
    public void setGeoLocations(List<GEOLocation> geoLocations) {
        this.geoLocations = geoLocations;
    }
    public void set_type(String _type) {
        this._type = _type;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }



}

public class GEOLocation implements Serializable{
    private String latitide;
    private String longitude;
    public String getLatitide() {
        return latitide;
    }
    public void setLatitide(String latitide) {
        this.latitide = latitide;
    }
    public String getLongitude() {
        return longitude;
    }
    public void setLongitude(String longitude) {
        this.longitude = longitude;
    }


}

和目标java

public class DestinationJSON  implements Serializable {

    private String  _type;
    private String id;
    private String name;
    private String type;
    private String latitide;
    private String longitude;
    public String get_type() {
        return _type;
    }
    public void set_type(String _type) {
        this._type = _type;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getLatitide() {
        return latitide;
    }
    public void setLatitide(String latitide) {
        this.latitide = latitide;
    }
    public String getLongitude() {
        return longitude;
    }
    public void setLongitude(String longitude) {
        this.longitude = longitude;
    }
}

2 个答案:

答案 0 :(得分:1)

你需要的只是这个。您可以在IDE中使用简单的复制和粘贴来尝试此类。

package stackoverflow.questions;

import java.util.*;

import com.google.gson.Gson;

public class Q20433539{

   public static void main(String[] args){
         String json = "{\"results\":"+
         "[{\"_type\":\"Position\",\"_id\":377078,\"name\":\"Potsdam, Germany\",\"type\":\"location\",\"geo_position\":{\"latitude\":52.39886,\"longitude\":13.06566}},"+
         "{\"_type\":\"Position\",\"_id\":410978,\"name\":\"Potsdam, USA\",\"type\":\"location\",\"geo_position\":{\"latitude\":44.66978,\"longitude\":-74.98131}}]}";


   Gson gson = new Gson();
   Map m = gson.fromJson(json, Map.class);

   List<Map> innerList = (List<Map>) m.get("results");
   for(Map result: innerList){
      Map<String, Double> geo_position = (Map<String, Double>) result.get("geo_position");
      result.put("latitude", geo_position.get("latitude"));
      result.put("longitude", geo_position.get("longitude"));
      result.remove("geo_position");
   }
   System.out.println(gson.toJson(m));


   }


}

当然,它的工作原理是你总是想要平坦的地理信息。

解释:在使用Gson时使用POJO很方便,但这不是唯一的方法。如果您未指定预期结果,Gson也可以解除对阵列/地图的分解。所以我做了,然后我操纵了结构来展开你的数据。之后,Gson可以再次将Arrays / Maps结构序列化为您想要的JSON。

答案 1 :(得分:0)

要快速轻松地将JSON字符串格式化为漂亮的,人类可读的格式,请使用json-io库(https://github.com/jdereg/json-io)。

以下行将格式化JSON字符串:

String formattedJson = JsonWriter.formatJson(String json)

formattedJson值的格式很好,类似于jsoneditoronline.com格式化JSON。

{
  "array": [
    1,
    2,
    3
  ],
  "boolean": true,
  "null": null,
  "number": 123,
  "object": {
    "a": "b",
    "c": "d",
    "e": "f"
  },
  "string": "Hello World"
}