Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在将由Jackson映射器序列化的对象中包含JSON内容的最佳方法_Java_Json_Jackson - Fatal编程技术网

Java 在将由Jackson映射器序列化的对象中包含JSON内容的最佳方法

Java 在将由Jackson映射器序列化的对象中包含JSON内容的最佳方法,java,json,jackson,Java,Json,Jackson,我正在使用Jackson Mapper对象将对象封送到JSON中。它工作得很好,但有时我需要包含一些特定的JSON,这些JSON实际上不是要封送的对象的属性。如果我创建一个字符串属性,比如“extraJSON”,并将JSON内容放在那里,当该对象被封送时,extraJSON将被转义,因此最终成为JSON中的某种JSON。 我曾尝试创建JsonObject(Java8JSON)类型的属性,但未正确封送 有没有办法解决这个问题?到目前为止,我使用的是本地类(我动态创建并使用“Object”类型属性)

我正在使用Jackson Mapper对象将对象封送到JSON中。它工作得很好,但有时我需要包含一些特定的JSON,这些JSON实际上不是要封送的对象的属性。如果我创建一个字符串属性,比如“extraJSON”,并将JSON内容放在那里,当该对象被封送时,extraJSON将被转义,因此最终成为JSON中的某种JSON。 我曾尝试创建JsonObject(Java8JSON)类型的属性,但未正确封送


有没有办法解决这个问题?到目前为止,我使用的是本地类(我动态创建并使用“Object”类型属性),虽然有效,但这是一个很难解决的问题。

下面是一个使用@JsonRawValue将类成员编组为JSON而不是作为包含转义JSON字符串的属性的非常基本的示例。不知道是否适用于您的场景,但希望能有所帮助

package com.spring.jackson.rawjson;

import static org.junit.Assert.assertEquals;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonRawValue;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;

public class RawJsonTest {

    public static class PojoWithRawJsonMember {

        private final String member1;
        private final String member2;
        private final String rawJsonMember1;

        public PojoWithRawJsonMember(String member1, String member2, String rawJsonMember1) {
            this.member1 = member1;
            this.member2 = member2;
            this.rawJsonMember1 = rawJsonMember1;
        }

        @JsonProperty("member1")
        public String getMember1() {
            return member1;
        }

        @JsonProperty("member2")
        public String getMember2() {
            return member2;
        }

        @JsonRawValue
        public String getRawJsonMember1() {
            return rawJsonMember1;
        }
    }

    @Test
    public void jsonRaw_shouldMarshalRawJson() throws Exception {
        ObjectMapper mapper = new ObjectMapper();
        PojoWithRawJsonMember thingToMarshal = new PojoWithRawJsonMember("value1", "value2", "{\"key\":\"value\"}");
        String marshalled = mapper.writeValueAsString(thingToMarshal);
        assertEquals("{\"rawJsonMember1\":{\"key\":\"value\"},\"member1\":\"value1\",\"member2\":\"value2\"}",
                marshalled);
    }
}

@JsonRawValue在序列化时工作。据我从JavaDocs中了解,它不适用于反序列化。

您尝试过@JsonRawValue吗?