我正在努力用Java生成JSON字符串。
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
JSONArray ja = new JSONArray();
JSONObject js = new JSONObject();
JSONObject j = new JSONObject();
String s = "[{\"shakil\",\"29\",\"7676\"}]";
js.put("id", "1");
js.put("data", s);
ja.add(js);
j.put("rows", ja);
System.out.println(j.toString());
实际输出:
{"rows":[{"id":"2","data":"[{\"shakil\",\"29\",\"7676\"}]"}]}
预期产出:
{"rows":[{"id":"2","data":["shakil", "29","7676"]}]};
答案 0 :(得分:22)
s
String
put
JSONObject
JSONArray
data
// using http://jettison.codehaus.org/
JSONObject outerObject = new JSONObject();
JSONArray outerArray = new JSONArray();
JSONObject innerObject = new JSONObject();
JSONArray innerArray = new JSONArray();
innerArray.put("shakil");
innerArray.put("29");
innerArray.put("7676");
innerObject.put("id", "2");
innerObject.put("data", innerArray);
outerArray.put(innerObject);
outerObject.put("rows", outerArray);
System.out.println(outerObject.toString());
{
"rows": [
{
"id": "2",
"data": [
"shakil",
"29",
"7676"
]
}
]
}
{{1}}。您必须为{{1}}:
{{1}}
结果:
{{1}}
答案 1 :(得分:10)
写
String[] s = new String[] {"shakil", "29" , "7676"};
而不是
String s = "[{\"shakil\",\"29\",\"7676\"}]";
答案 2 :(得分:1)
查看gson,它将为您提供许多选项,用于将Java对象序列化/反序列化为JSON。
摘自网页的示例
Gson gson = new Gson();
int[] ints = {1, 2, 3, 4, 5};
String[] strings = {"abc", "def", "ghi"};
//(Serialization)
gson.toJson(ints); ==> prints [1,2,3,4,5]
gson.toJson(strings); ==> prints ["abc", "def", "ghi"]
//(Deserialization)
int[] ints2 = gson.fromJson("[1,2,3,4,5]", int[].class);
答案 3 :(得分:1)
终于找到了net.sf.json的答案
JSONArray data1 = new JSONArray();
data1.add("shakil");
data1.add("29");
data1.add("100");
JSONObject inner1 = new JSONObject();
inner1.put("id", "1");
inner1.put("data", data1);
JSONArray list2 = new JSONArray();
list2.add(inner1);
JSONObject finalObj = new JSONObject();
finalObj.put("rows", list2);
System.out.println(finalObj);
答案 4 :(得分:1)
无法在Java中声明JSON字符串是一件非常痛苦的事。主要是由于(a)没有多行字符串(b)转义双引号使得它的可读性变得一团糟。
我通过使用单引号来声明JSON字符串(使用标准多行连接)来解决这个问题。没什么好看的:
String jsonStr =
"{" +
"'address': " +
"{" +
"'name': '" + name + "'," +
"'city': '" + city + "'," +
"'street1': '"+ street1 +"'," +
"'street2': '"+ street2 +"'," +
"'zip': '" + zip + "', " +
"'state':'" + state + "'," +
"'country': '" + country + "'," +
"'phone': '" + phone + "'" +
"}" +
"}";
jsonStr = MyUtil.requote(jsonStr);
System.out.println(jsonStr);
MyUtil
public static String requote(String jsonString) {
return jsonString.replace('\'', '"');
}
有些人可能会发现这比声明Map更麻烦,但是当我必须使用字符串语法构建JSON时,这对我有用。
答案 5 :(得分:1)
在没有使用Objectmapper或类似的情况下直接将json写为String时,我发现了很多问题。
我建议你写你的Json(正如你定义的那样):
{"rows":[{"id":"2","data":["shakil", "29","7676"]}]}
然后只需使用这个小小的在线工具:http://www.jsonschema2pojo.org/
这可以简单地将Json转换成Java类,也可以使用多个类。如果你想在以后使用Gson或Jackson,那么你可以在那一代选择。
Gson有点轻量级,可能更适合开始。我更喜欢杰克逊,因为你可以创造类似计算属性的东西 - 但这已经非常详细了。
https://code.google.com/p/google-gson/
添加Gson后,您需要做的是:
Gson gson = new Gson();
MyGeneratedClass target = new MyGeneratedClass();
String json = gson.toJson(target);
瞧瞧:你已经生成了一个简单的json而没有考虑如何在以后更改它!