【问题标题】:Error on JsonElement cannot be convert to JsonObjectJsonElement 上的错误无法转换为 JsonObject
【发布时间】:2021-07-16 08:10:10
【问题描述】:

所以有一个jsonReqObj,

jsonReqObj = {
 "postData" : {
     "name":"abc",
     "age": 3,
     "details": {
        "eyeColor":"green",
        "height": "172cm",
        "weight": "124lb",
   }
 }
}

还有一个保存函数会返回一个字符串。我想用那个save函数,但是save json的输入参数应该是postData里面的json。

public String save(JsonObject jsonReqObj) throw IOException {
...
 return message
}

下面是我的代码

JsonObject jsonReqPostData = jsonReqObj.get("postData")

String finalMes = save(jsonReqPostData);

但我得到的错误是

com.google.gson.JsonElement cannot be convert to com.google.gson.JsonObject. 

【问题讨论】:

  • 作为旁注,显示 哪里 你得到了错误会很有用。鉴于(我假设)它与get 的调用一致,其他一切(尤其是save 方法)都无关紧要。

标签: java json string gson jsonelement


【解决方案1】:

JsonObject.get 返回一个JsonElement - 它可能是一个字符串,或者一个布尔值等。

启用选项仍是调用get,但转换为JsonObject

JsonObject jsonReqPostData = (JsonObject) jsonReqObj.get("postData");

如果事实证明postData is 是一个字符串等,这将失败并出现异常。这可能很好。如果jsonReqObj 根本不包含postData 属性,它将返回null - 在这种情况下,转换将成功,变量jsonReqPostData 为空值。

另一种可能更清楚的选择是调用getAsJsonObject

JsonObject jsonReqPostData = jsonReqObj.getAsJsonObject("postData");

【讨论】:

  • getAsJsonObject(String memberName)代替get(String memberName)不是更准确吗?
  • @JigneshM.Khatri:是的,绝对适合我!将添加它作为替代方案。 (我认为它不一定“更准确”,但仍然是更好的选择。)
  • 是的,“更准确”,我的意思是说更标准的方法。
【解决方案2】:

我已使用 https://jsonlint.com/ 验证了您的 JSON 文件,但格式似乎不正确,而不是:

jsonReqObj = {
    "postData": {
        "name": "abc",
        "age": 3,
        "details": {
            "eyeColor": "green",
            "height": "172cm",
            "weight": "124lb",
        }
    }
}

应该是:

{
    "postData": {
        "name": "abc",
        "age": 3,
        "details": {
            "eyeColor": "green",
            "height": "172cm",
            "weight": "124lb"
        }
    }
}

也许这就是你不能转换为对象的原因

注意:我会将此作为评论而不是作为答案,但我没有足够的声誉T_T

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    相关资源
    最近更新 更多