传递一个手动的内容创建的JSONObject杰克逊

丹尼斯:

如果我要得到我的一个实体的I databaseentry得到正确的结果,但这个结果有换行符,这我不想有。我想是这样的(一个jsonfile):

    {
  "id" : 20706,
  "name" : "Ecole des Ponts ParisTech",
  "institution_type" : {
    "id" : 2,
    "name" : "Research facility"
  },

但我得到的是:

{"institution":["{\r\n  \"id\" : 20706,\r\n  \"name\" : \"Ecole des Ponts ParisTech\",\r\n  \"institution_type\" : {\r\n    \"id\" : 2,\r\n    \"name\" : \"Research facility\"\r\n  },

我的代码来获得这样的:

ObjectMapper objectMapper = ObjectMapperFactory.getObjectMapper();
EditorialDAO dao = EditorialManager.dao();
    String valueValue = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(dao.get(Institution.class,20706));

是的,我希望有一个字符串,但不能与换行符和\我的“。

如跟着我ObjectMapper声明:

ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.setSerializationInclusion(Include.NON_NULL);
    objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
    objectMapper.disable(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS);
    objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
    objectMapper.configure(SerializationFeature.EAGER_SERIALIZER_FETCH, true);
    objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);

编辑:让valueValue后,下面的代码:

String response = objectMapper.writeValueAsString(dao.get(Basic.class, 323));
                JSONObject jsonObject = new JSONObject(response);       
                jsonObject.put(institution, valueValue);
                response = jsonObject.toString();
                dao.merge(objectMapper.readValue(response, Basic.class));

如果我尝试合并我得到这个错误:

com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of Institution: no String-argument constructor/factory method to deserialize from String value();

我不明白:我只是把那inpout从数据库正好到我的JSON和我Basic.class实体的机构类型。

@Entity
@JsonInclude(Include.NON_EMPTY)
public class Basis implements{

    @Id
    @SortableField
    @SequenceGenerator(name = "basis_generator", sequenceName = "basis_id_basis_seq", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "basis_generator")
    @Column(name="id_basis")
    @JsonView(View.Minimal.class)
    private int id;

    @ManyToOne
    @NotFound(action=NotFoundAction.IGNORE)
    @JsonView(View.Minimal.class)
    @JoinColumn(name="id_institution")
    private Institution institution;
第二:

这个问题的解决方案是不是通过valueValue直接到你jsonObject相反,它需要一个JsonObject它自己的。

JSONObject jsonObject = new JSONObject(response);       
jsonObject.put(institution, new JSONObject(valueValue));


直接传递JSON值导致下面的输出,其中包括引号被转义,并且额外的引号已遍布增值。这种方式只能用于基本类型。

{"institution":"{\"id\":20706,\"name\":\"Ecole des Ponts ParisTech\",\"institutionType\":{\"id\":2,\"name\":\"Research facility\"}}","id":1}


如果包裹成一个新的JsonObject,结果是正确的AA表现,这jackson可以处理。

{"institution":{"name":"Ecole des Ponts ParisTech","institutionType":{"name":"Research facility","id":2},"id":20706},"id":1}

PS:无论是原始的字符串是在漂亮的打印格式与否并不重要。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

杰克逊如何创建JsonObject

如何序列化一个列表的内容与杰克逊平坦JSON对象?

手动创建一个JUnit Result对象

捕获和处理异常杰克逊用一个自定义消息

杰克逊解串器委托给一个适用的解串器

解析JSON使用杰克逊:我们可以在一个POJO可选变量

映射一个JSON字符串与杰克逊对象将抛出MismatchedInputException

杰克逊-反序列化一个基本枚举

杰克逊在春季启动错误序列化一个ZonedDateTime

如何获得一个类,杰克逊的看法它的属性列表?

如何声明另一个杰克逊ObjectMapper不影响原豆的“客户”?

杰克逊:如果有多个串行器,则使用哪一个?

杰克逊默认解析为一个子类

杰克逊无法使用一个参数构造器构造实例

杰克逊的平面 JSON 用于一个字段的类/记录

杰克逊序列化简单的一个属性ValueObject像枚举-不嵌套

杰克逊-在数组中获取一个条目

如何将几个参数移动到杰克逊的另一个节点?

使用杰克逊从json数组中检索一个值

杰克逊坚持要映射一个未知的财产

杰克逊在同一个POJO中映射不同的展开元素

从杰克逊的一个对象到另一个对象的属性的深层复制?

创建可以从另一个阶段或手动调用的阶段?

我们可以手动创建一个Android Studio项目吗?

创建一个自定义的“ ls”,但仅用于手动使用

为主键手动创建索引是一个好习惯吗?

创建杰克逊ObjectMapper实例的副本

使用杰克逊创建json对象

杰克逊从类创建JavaType