为什么我的JSONObject(String)返回空?

时间:2019-04-21 11:21:08

标签: java json

因此,我从post方法接收到JSON,如下所示(填充字符串数组的JSON)。我在Java方法中以字符串形式收到它。我的目标是将其转换为JSONObject并对其进行迭代,例如:x.getString("0")

但是我有一个问题,当我尝试转换为JSONObject时,我正在使用import org.json.JSONObject,它将返回一个空的JSONObject,如下所示:{}  为什么会这样呢? 谢谢

编辑:并且成功接收到该字符串,因为如果我返回,它将返回我发送的JSON。

{ '0': [ 'Mon Apr 08 2019 19:26:37 GMT+0000 (UTC)' ],
  '1': [ '1234', '456', '1234', '456', '1234', '456', '545' ],
  '2': [ '1234', '456', '1234', '456', '1234', '456', '545' ],
  '3': [ '1234', '456', '1234', '456', '1234', '456', '545' ],
  '4': [ '1234', '456', '1234', '456', '1234', '456', '545' ],
  '5': [ 'Mon Apr 08 2019 19:30:00 GMT+0000 (UTC)' ] }
 // My Java method that converts JSON received to JSONObject:

@POST
    @Produces(MediaType.APPLICATION_JSON)
    @Path("/{nifCliente}") // irrelevant this part, ignore it, important is the String
    public JSONObject inserir (@PathParam("nifCliente")int c, String d) {
           JSONObject f = new JSONObject(d)
       return f;

    }

2 个答案:

答案 0 :(得分:0)

在当前的实现和JSON结构中,为了获取值,应使用f.get(“ 0”)而不是f.getString(“ 0”)。像这样:

        String json = "{ '0': [ 'Mon Apr 08 2019 19:26:37 GMT+0000 (UTC)' ],\n" +
            "  '1': [ '1234', '456', '1234', '456', '1234', '456', '545' ],\n" +
            "  '2': [ '1234', '456', '1234', '456', '1234', '456', '545' ],\n" +
            "  '3': [ '1234', '456', '1234', '456', '1234', '456', '545' ],\n" +
            "  '4': [ '1234', '456', '1234', '456', '1234', '456', '545' ],\n" +
            "  '5': [ 'Mon Apr 08 2019 19:30:00 GMT+0000 (UTC)' ] }";
    JSONObject f = new JSONObject(json);
    System.out.println(f.get("0"));

上面的代码应该可以工作,输出将是:

  

[““ 2019年4月8日星期一19:26:37 GMT + 0000(UTC)”]

您的JSOn无效。并且邮递员集合中没有正确的application / json标头。 尝试使用此JSON:

{
"0": [
    "Mon Apr 08 2019 19:26:37 GMT+0000 (UTC)"
],
"1": [
    "1234",
    "456",
    "1234",
    "456",
    "1234",
    "456",
    "545"
],
"2": [
    "1234",
    "456",
    "1234",
    "456",
    "1234",
    "456",
    "545"
],
"3": [
    "1234",
    "456",
    "1234",
    "456",
    "1234",
    "456",
    "545"
],
"4": [
    "1234",
    "456",
    "1234",
    "456",
    "1234",
    "456",
    "545"
],
"5": [
    "Mon Apr 08 2019 19:30:00 GMT+0000 (UTC)"
]

}

编辑1:

并将标题添加到POSTMAN

答案 1 :(得分:0)

您的问题不是在构造JSONObject上。

您的问题是,当您尝试将JSONObject返回为@Produces(MediaType.APPLICATION_JSON)时,系统不知道如何解析它。

由于@Produces(MediaType.APPLICATION_JSON)知道将String解析为Json,因此您尝试返回收到的相同对象,并且将看到它的工作原理。

然后尝试将f返回为字符串:

    @POST
    @Produces(MediaType.APPLICATION_JSON)
    @Path("/{nifCliente}") // irrelevant this part, ingore it, important is the String
    public String inserir (@PathParam("nifCliente")int c, String d) {
           JSONObject f = new JSONObject(d);

           return f.toString();

    }