无法构造正确的JSON字符串

时间:2015-03-16 09:34:52

标签: json gson

我正在学习JSON并使用 gson 来构建json字符串。 这就是我需要的。

{
  "version": "1.0",
  "interface_type": "web",
  "request_type": "1",
  "username": "test",
  "password": "test",
  "sender_id": "test",
  "doctor_advice": false,
  "type": "test",
  "bulk": "test",
  "msg": "test",
  "recipients": [
    919845098450,
    919845098451
  ]
}  

但我变得像这样。

{
  "version": "1.0",
  "interface_type": "web",
  "request_type": "1",
  "username": "test",
  "password": "test",
  "sender_id": "test",
  "doctor_advice": false,
  "type": "test",
  "bulk": "test",
  "msg": "test",
  "recepients": [
    "9845098450",
    "9845098451",
    {}
  ]
}

请告诉我如何提出上述要求。

这是代码

import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
public class gsonWriter {
    public static void main(String args[]) {
        JsonObject request = new JsonObject();
        request.addProperty("version", "1.0");
        request.addProperty("interface_type", "web");
        request.addProperty("request_type", "1");
        request.addProperty("username", "test");
        request.addProperty("password", "test");
        request.addProperty("sender_id", "test");
        request.addProperty("doctor_advice", false);
        request.addProperty("type", "test");
        request.addProperty("bulk", "test");
        request.addProperty("msg", "test");
        JsonArray recepients = new JsonArray();
        JsonObject recepientList = new JsonObject();
        recepients.add(new JsonPrimitive("9845098450"));
        recepients.add(new JsonPrimitive("9845098451"));
        recepients.add(recepientList);
        request.add("recepients", recepients);
        Gson gson = new GsonBuilder().setPrettyPrinting().serializeNulls()
                .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
                .create();
        System.out.println(gson.toJson(request));
    }
}

我并不想使用java-pojo。需要普通字符串才能通过URL传递它。 非常感谢您的帮助。

另外请建议我一个比gson更好的开源Json绑定器可能是JacksonJsonGenson或者是否有任何其他可以帮助我开发完全成熟的应用程序的应用程序不断获得宁静的服务并收到同样的回复:)。

2 个答案:

答案 0 :(得分:0)

不需要在recipientsList添加recipients JSonArray。删除这些行,您将获得所需的相同输出。现在您要添加一个空的JSonObject,由{}显示。

答案 1 :(得分:0)

此片段有2个不同之处:

"recepients": [
  "9845098450",
  "9845098451",
  {}
]
  1. 收件人必须是数字,而不是字符串。

  2. 不应该有{}空对象。

  3. 正确的代码:

    JsonObject request = new JsonObject();
    request.addProperty("version", "1.0");
    request.addProperty("interface_type", "web");
    request.addProperty("request_type", "1");
    request.addProperty("username", "test");
    request.addProperty("password", "test");
    request.addProperty("sender_id", "test");
    request.addProperty("doctor_advice", false);
    request.addProperty("type", "test");
    request.addProperty("bulk", "test");
    request.addProperty("msg", "test");
    
    JsonArray recepients = new JsonArray();
    recepients.add(new JsonPrimitive(9845098450L));
    recepients.add(new JsonPrimitive(9845098451L));
    request.add("recepients", recepients);
    
    Gson gson = new GsonBuilder()
            .setPrettyPrinting()
            .serializeNulls()
            .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
            .create();
    System.out.println(gson.toJson(request));
    

    要将收件人作为数字传递,您需要在JsonPrimitive构造函数中传递一个数字。对于int类型,您的值太大,因此我们需要通过添加后缀long来使它们L

    要避免空{}个对象,只需删除recepientList变量,根本不需要它。