有没有一种方法可以很好地使用gson获取具有Java中具有4个变量的数组的列表

时间:2019-05-03 20:59:58

标签: java json gson deserialization json-deserialization

我正在使用3D做一个lwjgl引擎。

我试图使一个类使用HashMap的列表,但是HashMap仅接受2个变量,因此不起作用。

获取JSON文件的部分代码

Gson().fromJson(string.toString(), BlockIndexFile.class);

BlockIndexFile类

public class BlockIndexFile {

    List<HashMap<String, String>> blocks = new ArrayList<HashMap<String, String>>();

    public void setBlocks(List<HashMap<String, String>> blocks) {
        this.blocks = blocks;
    }

    public List<HashMap<String, String>> getBlocks(){
        return this.blocks;
    }
}

和json文件

{
    "blocks":
    [
        {
        "name": "Foo",
        "id": "foo",
        "model": "cube1",
        "texture": "foo"

        }
    ]
}

我希望能够使用HashMap来获取id,然后使用它来获取其他变量,例如texturemodel

1 个答案:

答案 0 :(得分:0)

HashMap可以包含多个2变量。参见下面的示例,如何使用它:

import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class GsonApp {

    public static void main(String[] args) throws Exception {
        File jsonFile = new File("./resource/test.json").getAbsoluteFile();

        Gson gson = new GsonBuilder().create();
        BlockIndexFile blockIndexFile;
        try (FileReader fileReader = new FileReader(jsonFile)) {
            blockIndexFile = gson.fromJson(fileReader, BlockIndexFile.class);
        }
        HashMap<String, String> node0 = blockIndexFile.getBlocks().get(0);
        System.out.println("id => " + node0.get("id"));
        System.out.println("model => " + node0.get("id"));
        System.out.println("texture => " + node0.get("id"));
    }
}

上面的代码显示:

id =>foo
model =>foo
texture =>foo

您可以创建Map而不是POJO,并且代码应该更加简单明了:

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

public class GsonApp {

    public static void main(String[] args) throws Exception {
        File jsonFile = new File("./resource/test.json").getAbsoluteFile();

        Gson gson = new GsonBuilder().create();
        BlockIndexFile blockIndexFile;
        try (FileReader fileReader = new FileReader(jsonFile)) {
            blockIndexFile = gson.fromJson(fileReader, BlockIndexFile.class);
        }
        Block node0 = blockIndexFile.getBlocks().get(0);
        System.out.println(node0);
    }
}

class BlockIndexFile {

    private List<Block> blocks = new ArrayList<>();

    // getters, setters
}

class Block {

    private String id;
    private String name;
    private String model;
    private String texture;

    // getters, setters, toString
}

上面的代码显示:

Block{id='foo', name='Foo', model='cube1', texture='foo'}