为了账号安全,请及时绑定邮箱和手机立即绑定

Gson 无法解析位于 json 对象中的 json 数组字符串作为 JsonArray

Gson 无法解析位于 json 对象中的 json 数组字符串作为 JsonArray

慕后森 2022-06-23 19:34:47
语境 :我正在尝试使用 gson 将以下 JSON 转换为 JAVA POJOJSON:    {    "task": "findRecords",    "foundRecords": "[1234567, 11234512]",    "logs": "records found [1234567, 11234512]",    "status": "success"}POJO类:public class JavaPojo {  String task = null;  JsonArray foundRecords = null;  String logs = null;  String status = null;}转换逻辑:  JavaPojo pojo = gson.fromJson(jsonString, JavaPojo.class);jsonString上面提到的 json 的字符串表示在哪里。问题 :转换逻辑失败com.google.gson.JsonSyntaxException:应为 com.google.gson.JsonArray 但为 com.google.gson.JsonPrimitive据我了解,gson 将foundRecords' 值解释为纯字符串,而不是将其解析为数组。现在为了解决这个问题,我foundRecords从修改JsonArray为String。转换成功。任何线索如何在保留foundRecordsas类型的同时实现转换JsonArray?笔记:转换foundRecords为后,我尝试使用 gsonString将字符串值转换为,但效果很奇怪。foundRecordsJsonArray//This works//Map json to pojo  JavaPojo pojo = gson.fromJson(jsonString, JavaPojo.class);//Convert foundRecords into a JsonArrayJsonArray arr = gson.fromJson(pojo.getFoundRecords(), JsonArray.class);所以现在我很困惑,如果 gson 可以将string类型转换foundRecords为JsonArray那为什么它不能更早地执行转换?
查看完整描述

1 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

我了解 REST API 响应不好并且违反了 JSON 语法。解决方案是更正 REST API,但不幸的是,在我的场景中,我无法请求 API 更正,所以我在最后编写了一个实用程序来清理jsonString.


如果对任何人有帮助,请在此处发布:


  /**

   * @param malformedArrayKey

   *          - Name of the key in the JSON object that has a malformed array

   *          for e.g consider following JSON object having a bad formed array

   *          <pre>

   *      {

   *        "task": "findRecords",

   *        "foundRecords": "[1234567, 11234512]",

   *      }

   *          </pre>

   * @param jsonString

   *          - String representation of the JSON object containing the malformed array

   * @return - json string having well formed array against the key {@code malformedArrayKey} supplied

   *         <pre>

   *        {

   *        "task": "findRecords",

   *        "foundRecords": [1234567, 11234512]

   *        }

   *         </pre>

   */

  public static String formatMalformedArray(String malformedArrayKey, String jsonString) {

    JsonObject jsonObj = gson.fromJson(jsonString, JsonObject.class);

    // get the faulty key value

    String malformedArrayKeyValue = jsonObj.get(malformedArrayKey)

        .getAsString();

    // drop it

    jsonObj.remove(malformedArrayKey);

    // create a array out of the malformed array string

    JsonArray jsonArray = gson.fromJson(malformedArrayKeyValue, JsonArray.class);

    // add the array back to the object

    jsonObj.add(malformedArrayKey, jsonArray);

    // now convert it into a well formed json string

    return jsonObj.toString();

  }

该方法非常基本,但可以满足我的用例。


查看完整回答
反对 回复 2022-06-23
  • 1 回答
  • 0 关注
  • 317 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信