当前位置: 首页 > 知识库问答 >
问题:

防止映射中的JSON丢失JSON格式

禹兴安
2023-03-14

我有一个JSON响应,看起来像这样:

 {
  "id": "value",
  "screen": {
    "name": "Name",
    "properties": {
      "message": {
        "type": "string",
        "value": {
          "rawResponse": {
            "_links": {
              "self": {
                "href": "link"
              }
            },
            "_embedded": {},
            "id": "id"
          }
        }
      }
    }
  },
  "interactionId": "id"
}

有了这个杰克逊模型:

package com.package;

import com.fasterxml.jackson.annotation.JsonInclude;
import java.util.List;
import java.util.Map;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;

@Data
@SuperBuilder(toBuilder = true)
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class PolicyStartResponse  {

  private String id;
  private Screen screen;

  @Data
  @SuperBuilder(toBuilder = true)
  @NoArgsConstructor
  @JsonInclude(JsonInclude.Include.NON_NULL)
  public static class Screen extends ApiModel<Screen> {

    private String name;
    private Map<String, Map<String, Object>> properties;
  }
}

由于某种原因,当我提取属性值时,它会丢失字段的引号,冒号被等号替换。

      LinkedHashMap mapValue =
          (LinkedHashMap)
              response.getScreen().getProperties().get("message").get("value");
      mapper = new ObjectMapper();
      // For some reason retrieving the JSON from the map strips the quotes on fields.
      mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
      // For some reason the colons get translated to equal signs.
      String value = mapValue.get("rawResponse").toString();
      POJO p = mapper.readValue(value, POJO.class);

出现以下错误:

JsonParseException: 
Unexpected character ('=' (code 61)): was expecting a colon to separate field name and value
 at [Source: (String)"{_links={self={href=

有什么想法吗?

共有1个答案

罗寒
2023-03-14

能够解决这个问题。JSONObject能够更好地处理它。

如果有人遇到这个问题,答案如下:

      JSONObject o = new JSONObject(response.getScreen().getProperties());
      POJO p = mapper.readValue(o.getJSONObject("message").getJSONObject("value").getJSONObject("rawResponse").toString(), PJOO.class);
 类似资料:
  • 注:内容翻译自官网文档 Language Guide (proto3) 中的 JSON Mapping 一节 Proto3支持JSON格式的标准编码, 让在系统之间分享数据变得容易. 编码在下面的表格中以type-by-type的基本原则进行描述. 如果一个值在json编码的数据中丢失或者它的值是null, 在被解析成protocol buffer时它将设置为对应的默认值.如果一个字段的值正好是p

  • 我有一个来自API的日期格式,如下所示: 即YYYY-DD-MM HH:MM AM/PM GMT时间戳。我正在将这个值映射到POJO中的日期变量。显然,它显示转换错误。 我想知道两件事: 我需要使用什么格式来与Jackson进行转换?日期是一个很好的字段类型吗? 一般来说,在Jackson将变量映射到对象成员之前,有没有一种方法可以处理这些变量?例如,更改格式、计算等

  • 问题内容: 我有一个来自API的Date格式,如下所示: 这是YYYY-DD-MM HH:MM am / pm GMT时间戳。我将此值映射到POJO中的Date变量。显然,其显示转换错误。 我想知道两件事: 与Jackson进行转换时,我需要使用哪种格式?Date是否适合此字段类型? 通常,是否有一种方法可以在Jackson将变量映射到Object成员之前处理这些变量?诸如更改格式,计算等。 问题

  • 目前我有一个DAO在做这样的事情: 而映射器则执行如下操作:(简化为该问题所需的内容) 作为JsonB字段存储在Aurora中。我读过一些关于注释的文章,但由于jdbi文档不清楚,所以我不确定这是否正确。 我映射结果的方式是“标准”方式吗?还是有更好/更有效的方式? 谢谢

  • 问题内容: 我有来自API的Date格式,如下所示: 这是YYYY-DD-MM HH:MM am / pm GMT时间戳。我将此值映射到POJO中的Date变量。显然,其显示转换错误。 我想知道两件事: 与Jackson进行转换时,我需要使用哪种格式?Date是否适合此字段类型? 通常,是否有一种方法可以在Jackson将变量映射到Object成员之前对其进行处理?诸如更改格式,计算等。 问题答案

  • Google数据丢失预防API支持.pdf还是.docx?我正在尝试在Java中对*.pdf文件做缩减,以隐藏敏感数据。 多谢!EMI