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

Java类来生成给定的JSON字符串

益炜
2023-03-14

我很难想出一个代表以下JSON的类。“家庭关系”是一组数组。每个数组都有person1和person2标识符,以及person1和person2之间的关系。正如您可能已经猜到的,数组中值的顺序非常重要。例如,如果“12345”和“31142”位置切换,则表示“31142”是“12345”的父项,这是完全错误的。

{
    "familyRelationships": [
        [
            "12345", 
            "SPOUSE", 
            "67890", 
            {
                "careTaker": false,
                "liveTogether": true
            }
        ],
        [
            "12345", 
            "PARENT", 
            "31142", 
            {
                "careTaker": true,
                "liveTogether": true
            }
        ],
        [
            "67890", 
            "PARENT", 
            "31142", 
            {
                "careTaker": true,
                "liveTogether": true
            }
        ]
    ]
}

共有3个答案

傅经业
2023-03-14

网上有一些工具可以为您做到这一点

package com.example;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"familyRelationships"
})
public class Example {

@JsonProperty("familyRelationships")
private List<List<String>> familyRelationships = null;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();

@JsonProperty("familyRelationships")
public List<List<String>> getFamilyRelationships() {
return familyRelationships;
}

@JsonProperty("familyRelationships")
public void setFamilyRelationships(List<List<String>> familyRelationships) {
this.familyRelationships = familyRelationships;
}

@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}

@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}

}

这是仅有的一种可能性http://www.jsonschema2pojo.org/

弓举
2023-03-14

JSON不会很好地成为POJO,因为数组中包含的类型不一致:

例如。

[
  "12345", 
  "SPOUSE", 
  "67890", 
  {
    "careTaker": false,
    "liveTogether": true
  }
]

字符串,字符串,字符串,对象。唯一有效的方法是如果你有一个对象[]列表

郭建华
2023-03-14

这应该可以通过使用自定义反序列化程序来实现。

在我看来,一个关系应该被建模为一个带有专有名称的java类。请注意,构造函数将一个JSONNode作为参数,我已经留下了我们的任何getter和setter:

public class Relationship {

    private final String id1;
    private final String id2;
    private final Relation relation;
    private final boolean careTaker;
    private final boolean liveTogether;

    public Relationship(JsonNode base) {
        this.id1 = base.get(0).asText();
        this.id2 = base.get(2).asText();
        this.relation = Relation.valueOf(base.get(1).asText());
        this.careTaker = base.get(3).get("careTaker").asBoolean();
        this.liveTogether = base.get(3).get("liveTogether").asBoolean();
    }

    public enum Relation {
        PARENT,
        SPOUSE;
    }

}

我们还需要一个存储集合的类。这是您将反序列化顶级对象的类(再次忽略getter和setter):

@JsonDeserialize( using = FamillyRelationshipsDeserializer.class )
public class FamillyRelationships {

    public List<Relationship> familyRelationships = new ArrayList<>();

} 

最后,我们需要实现上述类中引用的实际的JsonDeserializer。它应该如下所示。我用这个问题作为参考:

class FamillyRelationshipsDeserializer extends JsonDeserializer<FamillyRelationships> {
    @Override
    public FamillyRelationships deserialize(JsonParser jp, DeserializationContext ctxt) throws 
            IOException, JsonProcessingException {
        FamillyRelationships relationships = new FamillyRelationships();
        JsonNode node = jp.readValueAsTree();
        JsonNode rels = node.get("familyRelationships");

        for (int i = 0; i < rels.size(); i++) {
            relationships.familyRelationships.add(new Relationship(rels.get(i));
        }

        return relationships;
    }
}

我希望这能有所帮助,我实际上还没有测试过任何一个,它甚至可能不会编译,但原则应该是正确的。我还假设JSON是您提供的格式。如果这不是保证,那么你需要进行适当的检查并处理任何偏差。

如果您还希望能够序列化所有内容,则需要实现JsonSerializer查看此问题以了解更多详细信息。

 类似资料:
  • 问题内容: 找到字符串的所有排列的一种优雅方法是什么。例如,的排列会是和,但是较长的字符串呢?有任何实现示例吗? 问题答案:

  • 问题内容: java如何生成给定字符串的所有排列? 问题答案:

  • 本文向大家介绍Python生成给定长度的随机字符串,包括了Python生成给定长度的随机字符串的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将看到如何生成具有给定长度的随机字符串。这在创建需要随机性的随机密码或其他程序时很有用。 random.choices 随机模块中的choices函数可以产生字符串,然后可以将其连接以创建给定长度的字符串。 示例 输出结果 运行上面的代码给我们以下结

  • 本文向大家介绍详解java生成json字符串的方法,包括了详解java生成json字符串的方法的使用技巧和注意事项,需要的朋友参考一下 例1:将map对象添加一次元素(包括字符串对、数组),转换成json对象一次。 代码: 运行结果: (需要用到的包可在官网下载:http://www.json.org/java/index.html) 例2:list转换成json的三种参数形式。 运行结果: 例3

  • 本文向大家介绍生成随机字符串,直到使用Python生成给定字符串为止,包括了生成随机字符串,直到使用Python生成给定字符串为止的使用技巧和注意事项,需要的朋友参考一下 给定一个字符串,我们的任务是使用字符,特殊字符,数字等的随机组合生成一些字符串。 示例 算法 范例程式码 输出结果

  • 问题内容: 我想要一个从JSON生成Java源文件的实用程序。例如我们有 我们将此传递给实用程序,并希望它生成如下内容: 编写起来并不难,但是我敢肯定有人已经做到了。 问题答案: 尝试: http://www.jsonschema2pojo.org Orsol,我确定你在这里还没有等待解决方案,但是为了下一个找到此线程的人,我想我会添加一些更多信息。 自从09年12月问这个问题以来发生了两件事: