如何从Java中读取JSON文件

时间:2013-06-27 08:33:51

标签: java android json

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

我正在尝试用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,我非常感谢你的帮助!

3 个答案:

答案 0 :(得分:4)

而不是

 JSONObject json = new JSONObject(line);

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

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

这将采用行的连接(StringBuilder)的内容

答案 1 :(得分:1)

在这一行中,您只能在一行中读取以创建JSON对象。

 JSONObject json = new JSONObject(line);

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

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

答案 2 :(得分: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