标签: jsonnode

无法构造“com.domain.User”的实例(不存在创建者,如默认构造函数):无法从对象值反序列化

ObjectNode我有一个接受as 的控制器@RequestBody

ObjectNode代表json一些用户数据

{
    "given_name":"ana",
    "family_name": "fabry",
    "email": "fabry@gmail.com",
    "password": "mypass",
    "gender": "FEMALE"
}
Run Code Online (Sandbox Code Playgroud)

控制器.java

@PostMapping(produces = MediaType.APPLICATION_JSON_VALUE)
    public JsonNode createUser(@RequestBody ObjectNode user){
        return userService.addUser(user);
 }
Run Code Online (Sandbox Code Playgroud)

我想让用户将ObjectNode其转换为 JavaPOJO将其保存到数据库并再次将其返回为JsonNode.

UserServiceImpl.java

    private final UserRepository userRepository;
    private final UserMapper userMapper;

    @Override
    public JsonNode addUser(@RequestBody ObjectNode user) {
        try {
            return userMapper.fromJson(user)
                    .map(r -> {
                        final User created = userRepository.save(r);
                        return created;
                    })
                    .map(userMapper::toJson)
                    .orElseThrow(() -> new ResourceNotFoundException("Unable to find user")); …
Run Code Online (Sandbox Code Playgroud)

java pojo jsonnode

13
推荐指数
1
解决办法
3万
查看次数

Jackson:检查 ArrayNode 是否包含 JsonNode

我在 Java 应用程序中使用Jackson JSON 库及其树模型系统 ( JsonNode)。在此,我需要检查一个是否ArrayNode包含给定的JsonNode. 我一直在寻找通过JavaDoc中,我没有看到任何形式的.contains()对方法ArrayNode。我最终自己编写了一个包含方法:

   public static boolean arrayNodeContains(ArrayNode arrayNode, JsonNode node) {
      Stream<JsonNode> nodeStream = StreamSupport.stream(arrayNode.spliterator(), false);
      return nodeStream.anyMatch(j -> j.equals(node));
   }
Run Code Online (Sandbox Code Playgroud)

单元测试:

   @Test
   public void testArrayNodeContains()
         throws IOException
   {
      ObjectMapper mapper = new ObjectMapper;

      String arrayJsonString = "[{\"foo\":\"bar\"},{\"foo\":\"baz\"},{\"baz\":\"bar\"}]";
      String nodeTrueJsonString = "{\"foo\":\"bar\"}";
      String nodeFalseJsonString = "{\"foo\":\"brains\"}";
      List<Object> list = mapper.readValue(arrayJsonString, List.class);
      ArrayNode arrayNode = mapper.valueToTree(list);

      Map<String, Object> nodeTrueMap = mapper.readValue(nodeTrueJsonString, Map.class);
      JsonNode nodeTrue …
Run Code Online (Sandbox Code Playgroud)

java jackson objectmapper jsonnode

5
推荐指数
1
解决办法
5349
查看次数

如何将两个JsonNode与Jackson进行比较?

我有一个比较两个对象的方法,但是我不知道如何通过Jackson库比较JsonNode。

我想要得到这样的东西:

private boolean test(JsonNode source) {
    JsonNode test = compiler.process(file);
    return test.equals(source);
}
Run Code Online (Sandbox Code Playgroud)

java jackson jsonnode

5
推荐指数
1
解决办法
1741
查看次数

使用 Jackson 将 XML 属性添加到手动构建的节点树

我正在尝试设置代码来创建一个节点树Jackson,然后可以使用它来编写JSONXML. 我已经像这样手动创建了节点树:

XmlMapper nodeMapper = new XmlMapper();

ObjectNode rootNode = nodeMapper.createObjectNode();
ObjectNode currentNode = rootNode.putObject("Examples");
currentNode.put("Puppy", TRUE)
           .put("Apple", 2)
           .put("Jet", "Li");
currentNode = rootNode.putObject("Single");
currentNode.put("One", 1);

String writePath = "C:/users/itsameamario/Documents/basicXMLtest.xml";
nodeMapper.writeValue(new File(writePath), rootNode);
Run Code Online (Sandbox Code Playgroud)

我的 XML 输出是:

<?xml version="1.0"?>
<ObjectNode>
    <Examples>
        <Puppy>true</Puppy>
        <Apple>2</Apple>
        <Jet>Li</Jet>
    </Examples>
    <Single>
        <One>1</One>
    </Single>
</ObjectNode>
Run Code Online (Sandbox Code Playgroud)

但是,对于 XML 的某些部分,我想向其中一个节点添加一个属性,如下所示:

<Examples overlyComplicated="yes">
<!--...-->
</Examples>
Run Code Online (Sandbox Code Playgroud)

我发现的所有包含属性的示例都应用于预先存在的类。我一直无法找到一种将属性添加到手动构建的节点树的方法,如上所述。使用它可行Jackson吗?

java xml serialization jackson jsonnode

5
推荐指数
1
解决办法
3001
查看次数

Jackson API 中的 asDouble() 和 doubleValue() 有什么区别?

使用这些方法时我有点困惑。如果两种方法都返回相同的值,那么为什么 Jackson API 提供了两种不同的方法?

java jackson jackson-databind jsonnode

3
推荐指数
1
解决办法
474
查看次数

如何创建一个空的JsonNode?

我试图将一个空节点设置为其他 json 节点的值。new JsonNode()不起作用,因为它受到保护。

例子:

JsonNode jsonNode = externalSource(); // <--This is the parent json node
((ObjectNode) jsonNode).set("fieldName", new JsonNode()); // <-- I want to replace the existing 
// value of fieldName with an empty one
Run Code Online (Sandbox Code Playgroud)

目前这不起作用。

我们有什么特别的方法可以做到这一点吗?

java jackson jsonnode

3
推荐指数
1
解决办法
1万
查看次数

检查 jsonNode 是否包含特定键,然后在存在时提取其值

我有这个字符串,我使用 ObjectMapper 将其覆盖到 jsonNode。然后我尝试在这个 jsonNode 中查找特定的键,所以我使用了“.has”,但它不起作用!!\n这是我所做的:

\n
{ \n    "links": {\n        "data": {\n            "self": {\n                "body": "", \n                "content_type": "",\n                "href": "/api/v2/nodes",\n                "method": "POST", \n                "name": "" \n            } \n        }\n    },\n    "results": { \n        "data": {\n            "properties": { \n                "container": true,\n                "container_size": 0,\n                "create_date": "2020-06-22T16:19:07",\n                "create_user_id": 1000,\n                "description": ""\n                "description_multilingual": { \n                    "en": "",\n                    "fr_FR": "" \n                },\n                "external_create_date": null,\n                "external_identity": "",\n                "external_identity_type": "",\n                "external_modify_date": null,\n                "external_source": "",\n                "favorite": false,\n                "id": 276625,\n                "mime_type": null,\n                "modify_date": "2020-06-22T16:19:07",\n                "modify_user_id": 1000,\n                "name": …
Run Code Online (Sandbox Code Playgroud)

java json jsonnode

2
推荐指数
1
解决办法
3万
查看次数

如何将 JsonNode 参数(micronaut + kotlin)保存为 postgres 数据库中的 jsonb

我正在尝试保存一个具有 JsonNode 属性的实体,并且必须将其转换为 jsonb 才能存储在 postgres 数据库中。

这是数据库表:

CREATE TABLE IF NOT EXISTS configuration_data (
   id SERIAL NOT NULL PRIMARY KEY,
   namespace_name TEXT NOT NULL,
   dimension_id TEXT NOT NULL,
   dimension_value TEXT,
   path TEXT,
   data JSONB,
   version BIGINT DEFAULT 0
);
Run Code Online (Sandbox Code Playgroud)

这是实体:

@MappedEntity(value = "configuration_data")
data class ConfigurationDataEntity(
    @field:Id @GeneratedValue
    val id: Long,
    @MappedProperty("namespace_name")
    val namespaceName: String,
    @MappedProperty("dimension_id")
    val dimensionId: String,
    @MappedProperty("dimension_value")
    val dimensionValue: String,
    @MappedProperty("path")
    val path: String,
    @MappedProperty("data")
    val data: JsonNode,
    @MappedProperty("version")
    val version: Long,
)
Run Code Online (Sandbox Code Playgroud)

我正在尝试将这样的实体保存到存储库中:

val entity …
Run Code Online (Sandbox Code Playgroud)

postgresql kotlin jsonb jsonnode micronaut-data

2
推荐指数
1
解决办法
779
查看次数

如何使用 LINQ 迭代 JsonArray?

我有 JSON:

{
    "dimensions": [
        {
            "name": "dim1"
        },
        {
             "name": "dim2"
        },
        {
             "name": "dim3"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

加载到 JsonObject 中

JsonObject root = JsonNode.Parse(jsonString)?.AsObject();
Run Code Online (Sandbox Code Playgroud)

我希望使用 LINQ 迭代 JsonArray

var list =  root["dimensions"].GetEnumerator().Select(p => p["name"].GetValue).ToArray();
Run Code Online (Sandbox Code Playgroud)

但出现错误

CS1061:“IEnumerator <JsonNode?>”不包含“Select”的定义,并且找不到接受“IEnumerator <JsonNode?>”类型的第一个参数的可访问扩展方法“Select”(您是否缺少 using 指令或装配参考?)

我在谷歌上搜索 JsonNode 和 LINQ 时几乎找不到什么。也许还不支持?

c# linq jsonnode system.text.json

2
推荐指数
1
解决办法
207
查看次数