Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android java.lang.IllegalStateException:应为BEGIN_对象,但在第1行列处为字符串_Android_Json_Gson - Fatal编程技术网

Android java.lang.IllegalStateException:应为BEGIN_对象,但在第1行列处为字符串

Android java.lang.IllegalStateException:应为BEGIN_对象,但在第1行列处为字符串,android,json,gson,Android,Json,Gson,我正在学习烤肉,但在尝试时遇到了一个问题。 发现了很多类似的问题和更多的解决方案,但没有任何帮助 那是我的json { "firstName": "name", "lastName": "last", "resistances": { "a1": 1, "a2": 2, "a3": 3, "a4": 4 } } 玩家级 class Player implements Serializable{ String firstName;

我正在学习烤肉,但在尝试时遇到了一个问题。 发现了很多类似的问题和更多的解决方案,但没有任何帮助

那是我的json

{
  "firstName": "name",
  "lastName": "last",
  "resistances": {
    "a1": 1,
    "a2": 2,
    "a3": 3,
    "a4": 4
  }
}
玩家级

class Player implements Serializable{

    String firstName;
    String lastName;
    int[] resistances;

    public Player(String firstName, String lastName, int[] resistances) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.resistances = resistances;
    }
}
还有我是如何努力的

Gson gson = new Gson();
Player player = gson.fromJson("test.json", Player.class);
SOS

您的JSON“Resistences”对象应该如下所示,以便解析代码正常工作:

{
  "firstName": "name",
  "lastName": "last",
  "resistances": [
    1, 2, 3, 4
  ]
}
或者,将Java中的电阻变量更改为映射。-GSON可以将字典JSON对象解析为映射

class Player implements Serializable {

    String firstName;
    String lastName;
    Map<String, Integer> resistances;

    public Player(String firstName, String lastName, Map<String, Integer> resistances) {
        this.firstName   = firstName;
        this.lastName    = lastName;
        this.resistances = resistances;
    }
}
类播放器实现可序列化{
字符串名;
字符串lastName;
地图电阻;
公共播放器(字符串名、字符串名、地图阻力){
this.firstName=firstName;
this.lastName=lastName;
这是电阻=电阻;
}
}
解析字符串本身,在您的例子中是
test.json
,而不是它所代表的文件。您需要从试图解析的文件创建一个读取器,并将其作为第一个参数传递

如果test.json位于外部存储器中:

String fpath = Environment.getExternalStorageDirectory() + "/path/to/test.json";
 try {
        FileReader fr = new FileReader(fpath));
        gson.fromJson(fr, Player.class);
} catch (Exception e1) {
        e1.printStackTrace();
}

第三个变量将是一个对象。。Resistences..最外面的json pbj必须有一个名称..,“Resistences”要成为一个数组,它应该是:“Resistences”:[1,2,3,4],所以错误消息是因为它正在查找字符串“a1”,我从一开始就应该这样做,但这取决于文件的位置。如果
test.json
位于
raw
资源文件夹中,则可以使用
new InputStreamReader(getResources().openRawResource(R.raw.test))
(扩展名被忽略)。如果在sd卡上,答案会长一点。非常感谢!它起作用了!还有一个问题-放置.json文件是资产文件夹还是原始文件之间的区别是什么?这里再次解释一下tyvm!我能给你+业力吗D