我可以在应用程序中记录JSON文件,但是在解析JSON文件时遇到了麻烦。我正在尝试获取每个食谱的名称,以便可以在RecyclerView中显示它。稍后我确实需要来自JSON的更多数据,一次或根据需要进行所有解析会更好吗?
这是JSON的链接 https://d17h27t6h515a5.cloudfront.net/topher/2017/May/59121517_baking/baking.json
JSONObject recipeObject = new JSONObject(jsonString);
JSONArray recipeResults = recipeObject.getJSONArray("name");
Log.d(LOGTAG, "Recipe Results " + recipeResults.toString());
这是日志结果
2018-12-13 13:56:43.622 31472-31472/com.shawn.nichol.bakingapp W/System.err: at com.bakingapp.Data.ExtractRecipeData.recipeData(ExtractRecipeData.java:19)
答案 0 :(得分:3)
基础对象是对象数组。
尝试一下:
JSONArray recipes = new JSONArray(jsonString);
for(int i = 0; i < recipes.length(); i++){
JSONObject recipe = recipes.getJSONObject(i);
Log.d(LOGTAG, "Recipe name: " + recipe.getString("name"));
}
答案 1 :(得分:3)
首先,您需要使用工具来更好地了解json结构,我使用jsoneditoronline在链接中查看jsonobject的预览 http://jsoneditoronline.org/?id=dac21affd6544a00a553360e2c9fa311
首先最好进行解析,然后将数据传递给RecyclerViewAdapter 这个图书馆应该对您有很大帮助https://github.com/google/gson 这是gson的教程:https://howtodoinjava.com/apache-commons/google-gson-tutorial-convert-java-object-to-from-json/
在尝试访问名称之前,您需要访问数组的某个项目,假设您需要获取第一个对象的名称,即您喜欢的花生酱馅饼
JSONArray myJsonArray = new JSONArray(jsonString);
JSONObject recipeObject = myJsonArray.getJSONObject(0);
Log.d(LOGTAG, "Recipe Name" + recipeObject.getString("name").toString());
如果要将JSON转换为Java,则需要
Recipe recipe= gson.fromJson(recipeObject.toString(), Recipe.class);
按原样获取所有数据
List<Recipe> recipeList = new ArrayList();
Gson gson = new Gson();
for (int i = 0; i < jsonArray.length(); i++) {
Recipe recipe= gson.fromJson(myJsonArray .get(i).toString(), Recipe.class);
recipeList.add(recipe);
}