0

我整晚都在寻找,但找不到任何对我有用的东西。

我正在尝试用 Java 读取和解析 JSON 文件。我尝试了所有找到的代码,但没有一个对我有用。非常感谢您的帮助。

所以这里是代码:

public void parseJSONData() {

    clearData();

    try {
        FileInputStream in = openFileInput(getFilesDir()
                + "/tbl_category.json");
        InputStreamReader inputStreamReader = new InputStreamReader(in);
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        StringBuilder sb = new StringBuilder();
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            sb.append(line);
        }

我正在使用getFilesDir() + "/tbl_category.json"因为应用程序在启动时会在 /data/data/com.the.restaurant/files/ 中下载some.json文件。

这是其余的类代码:

        // parse json data and store into arraylist variables
        JSONObject json = new JSONObject(line);
        JSONArray data = json.getJSONArray("data");

        for (int i = 0; i < data.length(); i++) {
            JSONObject object = data.getJSONObject(i);

            JSONObject category = object.getJSONObject("Category");

            Category_ID.add(Long.parseLong(category
                    .getString("Category_ID")));
            Category_name.add(category.getString("Category_name"));
            Category_image.add(category.getString("Category_image"));
            Log.d("Category name", Category_name.get(i));

        }

    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        IOConnect = 1;
        e.printStackTrace();
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

我刚刚开始学习 Java,非常感谢您的帮助!

4

3 回答 3

4

代替

 JSONObject json = new JSONObject(line);

它将读取的最后一行转换为 JSON 对象(并且可能会失败),您需要

 JSONObject json = new JSONObject(sb.toString());

这将采用串联的行(的内容StringBuilder

于 2013-06-27T08:36:49.297 回答
1

在这一行中,您只阅读一行来创建 JSON 对象。

 JSONObject json = new JSONObject(line);

它应该使用StringBuilder包含整个 JSON 字符串的 which。

 JSONObject json = new JSONObject(sb.toString());
于 2013-06-27T08:36:45.497 回答
0
    val inputStream: InputStream = context.assets.open(fileName)
    dataDetails = inputStream.bufferedReader().use{it.readText()}

    // now we create a json object and read the values
    val jsonObject = JSONObject(dataDetails)

    // if you know that is a number you can get it like this
    var age = jsonObj.getInt("person_age")

    // the same for boolean
    var someBooleanValue = jsonObj.getBoolean("person_married")

    // for an array
    val jsonArrayLabels = jsonObj.getJSONArray("simpleArray")
    
    //If you know what type you have to get use the function for that type, 
    //so you can save them and later do manipulations with them  
于 2020-06-30T23:51:16.537 回答