Java JSON数组文本文件

时间:2011-02-03 19:16:04

标签: java json gson

我已经看到了这一点。我似乎无法从文本文件中获取地图数组。我的意思是,我可以获得其他一切但是地图的数组瓷砖。

这是文本文件:

{
'name': 'map_one.txt',
'title': 'xxx One',
'currentMap': 4,
'rightMap': 3,
'lefttMap': 5,
'downMap': 1,
'upMap': 2,
'items': [
    { name: 'Pickaxe', x: 5, y: 1 },
    { name: 'Battleaxe', x: 2, y: 3 }
],
    'map': [ [ 1,3,1,1,1,24,1,1,1,1,1,1,1 ],
    [ 1,3,1,1,1,24,1,1,1,1,1,1,1 ],
    [ 1,7,1,1,1,24,1,1,24,1,1,1,1 ],
    [ 1,7,1,1,7,1,1,1,24,1,1,1,1 ],
    [ 1,7,7,7,1,24,24,24,24,1,1,1,1 ],
    [ 1,1,7,1,1,24,1,24,1,1,1,1,1 ],
    [ 1,1,1,1,1,24,1,1,1,1,1,1,1 ],
    [ 1,1,3,1,1,24,1,1,1,1,1,1,1 ],
    [ 1,3,3,1,1,24,1,1,1,1,1,1,1 ]]
};

当我运行它时,我明白了:

==========================
 JSON MAP LOAD...
==========================

Name of map: xxx One
File of map: map_one.txt
ID of map: 4

==========================
 ITEMS IN MAP
==========================

# OF ITEMS: 2

>> Name: Pickaxe (5, 1)
>> Name: Battleaxe (2, 3)

==========================
 TILES OF MAP
==========================

null
Press any key to continue . . .

看到null?它是*假设是数组。

我做错了,可能,我知道。这是我到目前为止所做的:

import java.util.*;
import java.io.*;
import com.google.gson.*;


public class readGoogle {

    public static String MapTitle;
    public static Data data;
    public static Item item;
    public static String dan;
    public static FileReader fr;
    public static int number;
    public static int currentMap;
    public static int tile;
    public static String[] wepN;


        public static void main(String[] args) {


try {
    fr = new FileReader("map1.txt");
}catch(FileNotFoundException fne) {
    fne.printStackTrace();
}
        StringBuffer sb = new StringBuffer();
        char[] b = new char[1000];
        int n = 0;
        try {
        while ((n = fr.read(b)) > 0) {
             sb.append(b, 0, n);
         }
         }catch(IOException rex) {
             rex.printStackTrace();
         }
        String fileString = sb.toString();

    try {
    data = new Gson().fromJson(fileString, Data.class);
    }catch (Exception er) {
        er.printStackTrace();
    }

System.out.println("==========================\n JSON MAP LOAD...\n==========================\n");

    System.out.println("Name of map: " + data.getTitle());
    System.out.println("File of map: " + data.getName());
    System.out.println("ID of map: " + data.getCurrentMap());


String[] wepN = new String[100];
String[] wepX = new String[100];
String[] wepY = new String[100];
int[] tile = new int[256];

int wepQty = 0;

try {
for (int i=0; i < wepN.length; i++) {
    if (data.getItems().get(i).getName() == null || "".equals(data.getItems().get(i).getName())) {
        System.out.println(data.getItems().get(i).getName() + " -NO MOARE");
        break;
    }

    wepN[i] = data.getItems().get(i).getName();
    wepX[i] = Integer.toString(data.getItems().get(i).getX());
    wepY[i] = Integer.toString(data.getItems().get(i).getY());

    wepQty++;
}
}catch(Exception xe) { }

System.out.println("\n==========================\n ITEMS IN MAP\n==========================\n");
System.out.println("# OF ITEMS: " + wepQty + "\n");

for (int i=0; i < wepQty; i++) {
        System.out.println(">> Name: " + wepN[i] + " (" + wepX[i] + ", " + wepY[i] + ")");
    }

System.out.println("\n==========================\n TILES OF MAP\n==========================\n");

System.out.println(data.getMap());
    }


public static class Item {
        public String name;
        public int x;
        public int y;
        public int tile;

        public String getName() { return name; }
        public int getX() { return x; }
        public int getY() { return y; }

        public void setName(String name) { this.name = name; }
        public void setX(int x) { this.x = x; }
        public void setY(int y) { this.y = y; }
    }


      public static class Data {
            private String name;
            private String title;
            private int currentMap;
            private List<Item> items;
            private int[][] tile;

            public String getName() { return name; }
            public int getCurrentMap() { return currentMap; }
            public String getTitle() { return title; }
            public List<Item> getItems() { return items; }
            public int[][] getMap() { return tile; }

            public void setName(String name) { this.name = name; }
            public void setTitle(String title) { this.title = title; }
            public void setItems(List<Item> items) { this.items = items; }
            public void setMap(int[][] tile) { this.tile = tile; }
        }

}

1 个答案:

答案 0 :(得分:3)

我的想法是Data类有一个用于保存地图的tile字段,但在JSON中它被命名为map。

尝试:

public static class Data {
            private String name;
            private String title;
            private int currentMap;
            private List<Item> items;
            private int[][] map;

            public String getName() { return name; }
            public int getCurrentMap() { return currentMap; }
            public String getTitle() { return title; }
            public List<Item> getItems() { return items; }
            public int[][] getMap() { return map; }

            public void setName(String name) { this.name = name; }
            public void setTitle(String title) { this.title = title; }
            public void setItems(List<Item> items) { this.items = items; }
            public void setMap(int[][] map) { this.map=  map; }
        }