【问题标题】:How to convert Map of class<T> objects to json java如何将 class<T> 对象的 Map 转换为 json java
【发布时间】:2015-05-04 13:09:14
【问题描述】:

我有一些属性的类,例如:

public class MyClass {
    public int number;
    public String s;
}

我想将此类的 Map 转换为 json。例如:

Map<String, MyClass> map = new HashMap();
map.put("sss", new MyClass(1, "blabla");

json j = new json(map);

我希望输出是这样的:

{"sss":{"number":"1","s":"blabla"}}

有人知道如何在 JAVA 中做到这一点吗?我尝试使用JSONObjectGson,但对我不起作用。

【问题讨论】:

  • 您是否已经考虑过使用 Jackson-Mapper? - jackson.codehaus.org
  • @PatrickOutOfBounds,你能举例说明如何使用 Jackson-Mapper 做到这一点,因为我没有成功做到这一点。也许你的例子会对我有所帮助。

标签: java json gson


【解决方案1】:

你可以使用 Gson 类的 toJson() 方法将一个 java 对象转换为 json ,见下面的例子,

public class SomeObject {

    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 "SomeObject [data1=" + data1 + ", data2=" + data2 + ", list="
        + list + "]";
    }

}

我会将上述类的对象转换为 json ,当您将 json 转换回 java 对象时,getter 和 setter 方法很有用。

public static void main(String[] args) {

        SomeObject obj = new SomeObject();
        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);

        }

输出:

{"data1":100,"data2":"hello","list":["String 1","String 2","String 3"]}

【讨论】:

  • 当我使用这个对象时,我需要将 MyClass 对象转换为 String,然后再将其放入 JSONObject 对象(例如使用 gson),然后输出类似于:{"sss":" {\"number\":1,\"s\":\"test\"}"} 所以对我不好...
  • 我已经编辑了我的答案,现在它使用 Gson,您不必将任何内容转换为字符串。 @chani
【解决方案2】:

使用 Gson:

Gson gson = new GsonBuilder().create();
String json = gson.toJson(map);

【讨论】:

  • 我试过但是json字符串输出是:{"message":"java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType","code":1}跨度>
【解决方案3】:

你必须解决,括号问题。

map.put("sss", new MyClass(1,"test")); //observe 2 braces at the end!

以下代码应该可以为您解决问题,

Gson gson = new Gson();
String myJson = gson.toJson(map);

输出:

{"sss":{"number":1,"s":"test"}}

【讨论】:

  • (...) 只是一个例子。我解决了这个问题。你的答案和上一个答案是一样的。当我这样做时 - 我得到了这个 json 字符串: {"message":"java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType","code":1}
  • 你给我的链接是如何反序列化,我正在寻找序列化的方法...
  • 你能分享你的代码吗?我们可以查看它并返回解决方案
【解决方案4】:

为每个类实现一些自定义的toJSON()方法,如下所示:

public class MyClass1 {
    String number;
    String name;

    public MyClass1(String number, String name){
        this.number = number;
        this.name = name;
    }

    public JSONObject toJSON() throws JSONException {
        return new JSONObject("{\"number\" : \""+this.number+"\", \"name\":\""+this.name+"\"}");
    }

}

然后只需使用它将您的map 转换为jsonObject

public class MapToJSON {
    public static void main(String[] args) throws JSONException {
        Map<String, JSONObject> map = new HashMap<String, JSONObject>();
        map.put("sss", new MyClass1("1", "Hello").toJSON());

        System.out.println(new JSONObject(map));
    }
}

【讨论】:

  • 这个答案适合小班。但如果我的班级有超过 15 名成员....这就是我要做的。但我希望以更清洁的方式...
【解决方案5】:

我找到了方法:

import com.google.gson.Gson;
import org.json.JSONObject;

Gson gson = new Gson();

map.put("sss", new JSONObject(gson.toJson(new MyClass(1, "Hello"))));
map.put("aaa", new JSONObject(gson.toJson(new MyClass(2, "blabla"))));

String output = new JSONObject(map).toString();

现在输出是正确的。

非常感谢所有试图帮助我解决这个问题的人...

【讨论】:

    猜你喜欢
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 2011-12-23
    • 2023-03-17
    • 2016-12-12
    • 1970-01-01
    相关资源
    最近更新 更多