【问题标题】:I need to rename the key of the json object that I generate in java我需要重命名我在java中生成的json对象的键
【发布时间】:2021-02-27 17:37:38
【问题描述】:

我做了一个列表合并并创建了一个新列表,但是当我这样做时,json 的键是 id,我希望它是一个固定名称。

我以这种方式创建列表。 我不知道这是否是最有效的方法,但这是我得到的唯一方法。

public Map<Object, NotasMateriaDTO> buscaNotavfffsTipoList(Integer idusuario) {

    List<NotasMateria> notasMaterias = repository.findAll(Sort.by("dataNota").descending());
    List<Materia> materias = materiaRepository.findAll();
    ModelMapper mapper = new ModelMapper();

    List<NotasMateriaDTO> filter1 =
            notasMaterias.stream()
                    .filter(t -> t.getIdUsuario()== idusuario)
                    .map(mt -> mapper.map(mt, NotasMateriaDTO.class))
                    .collect(Collectors.toList());

    List<NotasMateriaDTO> filter2  = materias.stream()
            .filter(t ->t.getIdUsuario() ==(idusuario))
            .map(mt -> mapper.map(mt, NotasMateriaDTO.class))
            .collect(Collectors.toList());

    Map<Object, NotasMateriaDTO> serverMap1 = filter1.stream().collect(Collectors.toMap(NotasMateriaDTO::getIdMateria, Function.identity()));
    Map<Object, NotasMateriaDTO> serverMap2 = filter2.stream().collect(Collectors.toMap(NotasMateriaDTO::getIdMateria, Function.identity()));
    serverMap1.keySet().forEach(key -> serverMap1.merge(key,
            serverMap2.get(key),
            (server1, server2) -> {
                server1.setNomeMateria(server2.getNomeMateria());
                return server1;
            }));
    return  serverMap1;
}

这样它会返回该列表:

{
    "18": {
        "idNotaMateria": 1,
        "idMateria": 18,
        "idUsuario": 7,
        "notaMateria": 4.0,
        "nomeMateria": "dfsdf"
    },
    "10": {
        "idNotaMateria": 3,
        "idMateria": 10,
        "idUsuario": 7,
        "notaMateria": 10.0,
        "nomeMateria": "materia123"
    },
    "14": {
        "idNotaMateria": 6,
        "idMateria": 14,
        "idUsuario": 7,
        "notaMateria": 432.0,
        "nomeMateria": "mat123"
    }
}

希望她看起来像这样:

{
    "anyName": {
        "idNotaMateria": 1,
        "idMateria": 18,
        "idUsuario": 7,
        "notaMateria": 4.0,
        "nomeMateria": "dfsdf"
    },
    "anyName": {
        "idNotaMateria": 3,
        "idMateria": 10,
        "idUsuario": 7,
        "notaMateria": 10.0,
        "nomeMateria": "materia123"
    },
    "anyName": {
        "idNotaMateria": 6,
        "idMateria": 14,
        "idUsuario": 7,
        "notaMateria": 432.0,
        "nomeMateria": "mat123"
    }
}

【问题讨论】:

  • 简单问题,你将如何处理所有具有相同键的对象?
  • 更容易在前端操作
  • 发布 NotasMateriaDTO,我会帮助你
  • '@Getter @Setter public class NotasMateriaDTO { private int idNotaMateria;私人 int idMateria;私人 int idUsuario;私人双重记事本;私有字符串命名材料; } '

标签: java json lambda java-stream


【解决方案1】:

所以检查你的问题。考虑到你不应该有一个包含多个同名对象的 json 对象来实现你想要的没有任何意义

以下内容没有意义

  { 
       name: { object 1},
       name: { object 2}
    }

以下是在您的情况下有意义的内容

    [ 
       { object 1 },
       { object 2}
    ]

只需配置您的方法以返回这些对象的数组。这将是有道理的

public List<NotasMateriaDTO> buscaNotavfffsTipoList(Integer idusuario) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    相关资源
    最近更新 更多