如何访问插入另一个json的一个json?

时间:2015-05-07 18:08:23

标签: java json collections

在JSON中,我需要访问包含另一个JSON的密钥,如何访问它? 例如,我想访问"6a082df27f9fe4be184d7222b79c2f8a" id" 1401 Pecas Midia Grafica_v2 / Whirlpool_LinhaBranca_Positivo_CanaisdeAfinidade_SuperBanner _-"
 LinkedHashMap 是不可能的因为它返回1401 Pecas Midia Grafica_v2/Whirlpool_LinhaBranca_Positivo_CanaisdeAfinidade_SuperBanner_-={id=9843da8e02604ae0c048b2cfb6009c7d, path=p-554b9ef1e4b0c4105adacb2b/conteudo/08039a5f3ea1924ed7950bc0caf434a2.swf, nome=Whirlpool_LinhaBranca_Positivo_CanaisdeAfinidade_SuperBanner_-.swf, pathOriginal=1401 Pecas Midia Grafica_v2/Whirlpool_LinhaBranca_Positivo_CanaisdeAfinidade_SuperBanner_-.swf, imagem=p-554b9ef1e4b0c4105adacb2b/conteudo/d8c6b07bebf7df2c894c6b6ddaa35bbb.gif}

JSON

[
  {
    "permalink": "c8635076fa371e7642e6e284cc9b60dc",
    "pecas": {
      "1401 Pecas Midia Grafica_v2/Whirlpool_LinhaBranca_Positivo_CanaisdeAfinidade_SuperBanner_-": {
        "id": "6a082df27f9fe4be184d7222b79c2f8a",
        "path": "p-554ba68ce4b04befa5148ae4/conteudo/08039a5f3ea1924ed7950bc0caf434a2.swf",
        "nome": "Whirlpool_LinhaBranca_Positivo_CanaisdeAfinidade_SuperBanner_-.swf",
        "pathOriginal": "1401 Pecas Midia Grafica_v2/Whirlpool_LinhaBranca_Positivo_CanaisdeAfinidade_SuperBanner_-.swf",
        "imagem": "p-554ba68ce4b04befa5148ae4/conteudo/d8c6b07bebf7df2c894c6b6ddaa35bbb.gif"
      },
    ...
}
]  

我的代码

public BasicDBList addComment(String validacaoId, String permalinkId, String pecaId) {
        Validacao getValidacao = validacaoDAO.findById(validacaoId);
        BasicDBObject permalink = permalinkDAO.getPermalinks(validacaoId, permalinkId);
        LinkedHashMap pecas = (LinkedHashMap) permalink.get("pecas");
        if (getValidacao == null || permalink.isEmpty()) {
            Log.error(this, "Erro ao adicionar comentário: Id da validação ou permalink inválido.");
            throw new NotFoundException("Erro ao adicionar comentário.");
        }
        Set entrySet = pecas.entrySet();
        Iterator it = entrySet.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    throw new NotImplementedException();
}

1 个答案:

答案 0 :(得分:0)

假设您的json文件具有此结构

[
  {
    "permalink": "c8635076fa371e7642e6e284cc9b60dc",
    "pecas": {
      "1401 Pecas Midia Grafica_v2/Whirlpool_LinhaBranca_Positivo_CanaisdeAfinidade_SuperBanner_-": {
        "id": "6a082df27f9fe4be184d7222b79c2f8a",
        "path": "p-554ba68ce4b04befa5148ae4/conteudo/08039a5f3ea1924ed7950bc0caf434a2.swf",
        "nome": "Whirlpool_LinhaBranca_Positivo_CanaisdeAfinidade_SuperBanner_-.swf",
        "pathOriginal": "1401 Pecas Midia Grafica_v2/Whirlpool_LinhaBranca_Positivo_CanaisdeAfinidade_SuperBanner_-.swf",
        "imagem": "p-554ba68ce4b04befa5148ae4/conteudo/d8c6b07bebf7df2c894c6b6ddaa35bbb.gif"
      }
    }
  }
]

现在定义三个类:

标识符类:

class Identifier {
    String id;
    String path;
    String nome;
    String pathOriginal;
    String imagem;

    @Override
    public String toString() {
        return "[ " + id + " , " + path + " , " + nome + " , " + pathOriginal
                + " , " + imagem + " ]";
    }
    // getters, setters,...
}

Pecas课程:

class Pecas {
    @SerializedName("1401 Pecas Midia Grafica_v2/Whirlpool_LinhaBranca_Positivo_CanaisdeAfinidade_SuperBanner_-") 
    Identifier identifier;
    // getters and setters
}

和数据类

class Data {
    String permalink;
    Pecas pecas;
    // getters and setters
}

然后使用Gson API将您的json文件example.json转换为Data个对象的列表

Gson gson = new Gson();
List<Data> list = gson.fromJson(new BufferedReader(new FileReader(
        "example.json")), new TypeToken<List<Data>>() {
}.getType());

然后访问此ID 6a082df27f9fe4be184d7222b79c2f8a并输出

String id = list.get(0).getPecas().getIdentifier().getId();
System.out.println("This is the id you want to access "+id);

输出:

This is the id you want to access 6a082df27f9fe4be184d7222b79c2f8a