如何将Json数组转换为List <string>?

时间:2018-09-23 21:37:09

标签: android arrays json parsing

这是我正在解析的JSON。

   <item>{\"name\":{\"mainName\":\"Ham and cheese
                    sandwich\",\"alsoKnownAs\":[]},\"placeOfOrigin\":\"\",\"description\":\"A ham and cheese
                    sandwich is a common type of sandwich. It is made by putting cheese and sliced ham
                    between two slices of bread. The bread is sometimes buttered and/or toasted. Vegetables
                    like lettuce, tomato, onion or pickle slices can also be included. Various kinds of
                    mustard and mayonnaise are also
                    common.\",\"image\":\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/50/Grilled_ham_and_cheese_014.JPG/800px-Grilled_ham_and_cheese_014.JPG\",\

"ingredients\":[\"Sliced
                bread\",\"Cheese\",\"Ham\"]}

alsoKnownAs和Ingredients数组没有键。我需要将它们转换为列表并将其添加到Sandwich对象。目前,它不起作用。我认为for循环内的代码就足够了。有人可以看看吗?预先谢谢你。

我的代码基于以下线程的答案:Converting JSONarray to ArrayList

此外,上述链接中的张贴者之一建议通过此链接使用辅助方法(第45行)。 https://gist.github.com/codebutler/2339666

我的代码:

public static Sandwich parseSandwichJson(String json) {
        // If the JSON string is empty or null, then return early.
        if (TextUtils.isEmpty(json)) {
            return null;
        }

        Sandwich sandwiches = null;
        try {

            // Create a JSONObject from the JSON file
            JSONObject jsonObject = new JSONObject(json);

            //fetch JSONObject named name
            JSONObject objectName = jsonObject.getJSONObject("name");

            // Extract the value for the key called "main_name"
            String mainName = "";
            if (objectName.has("mainName")) {
                mainName = objectName.optString(KEY_MAIN_NAME);
            }

            JSONArray alsoKnownAsArray = objectName.optJSONArray(KEY_ALSO_KNOWN_AS);
            List<String> alsoKnownData = new ArrayList();
            for (int i = 0; i < alsoKnownAsArray.length(); i++) {
               alsoKnownData.add(alsoKnownAsArray.getString(i));

            }

            String placeOfOrigin = "";
            if (objectName.has("placeOfOrigin")) {
                placeOfOrigin = objectName.optString(KEY_PLACE_OF_ORIGIN);
            }

            String description = "";
            if (objectName.has("description")) {
                description = objectName.optString(KEY_DESCRIPTION);
            }

            String image = "";
            if (objectName.has("image")) {
                image = objectName.optString(KEY_IMAGE);
            }

                       JSONArray ingredientsArray = objectName.optJSONArray(KEY_INGREDIENTS);
            List<String> ingredientsData = new ArrayList<String>();
            if (ingredientsArray != null) {
                for (int i = 0; i < ingredientsArray.length(); i++) {
                    ingredientsData.add(ingredientsArray.getString(i));
                }
            }

            Sandwich sandwich = new Sandwich(mainName, alsoKnownAsArray, placeOfOrigin, description, image, ingredientsArray);
            sandwiches.add(sandwich);


        } catch (JSONException e) {
            // If an error is thrown when executing any of the above statements in the "try" block,
            // catch the exception here, so the app doesn't crash. Print a log message
            // with the message from the exception.
            Log.e("QueryUtils", "Problem parsing sandwich JSON results", e);
        }
        // Return the list of sandwiches
        return sandwiches;
    }

2 个答案:

答案 0 :(得分:0)

您可以通过以下方式解析JSON:

public class JsonUtils {

public static Sandwich parseSandwichJson(String json) {

    try {
        JSONObject mainJsonObject = new JSONObject(json);

        JSONObject name = mainJsonObject.getJSONObject("name");
        String mainName = name.getString("mainName");

        JSONArray alsoKnownAsArray = name.getJSONArray("alsoKnownAs");
        List<String> alsoKnownAs = new ArrayList<>(alsoKnownAsArray.length());

        for ( int i = 0; i < alsoKnownAsArray.length(); i++ ) {
            alsoKnownAs.add(alsoKnownAsArray.getString(i));

            Log.i("alsoKnownAs", "I am here" + alsoKnownAs);
        }

        String placeOfOrigin = mainJsonObject.optString("placeOfOrigin");

        String description = mainJsonObject.getString("description");

        String image = mainJsonObject.getString("image");

        JSONArray ingredientsArray = mainJsonObject.getJSONArray("ingredients");
        List<String> ingredients = new ArrayList<>(ingredientsArray.length());

        for ( int i = 0; i < ingredientsArray.length(); i++ ) {
            Log.i("ingredients", "These are the ingredients" + ingredients);
            ingredients.add(ingredientsArray.getString(i));
        }

        return new Sandwich(mainName, alsoKnownAs, placeOfOrigin, description, image, ingredients);

    } catch (JSONException e) {
        e.printStackTrace();
    }
    return null;
  }
}

答案 1 :(得分:0)

使用Gson进行解析(https://github.com/google/gson

添加此2类以处理数据

public class CustomData
{
    private List<String> ingredients;

    private String placeOfOrigin;

    private String description;

    private Name name;

    private String image;

    public List<String> getIngredients ()
    {
        return ingredients;
    }

    public void setIngredients (List<String> ingredients)
    {
        this.ingredients = ingredients;
    }

    public String getPlaceOfOrigin ()
    {
        return placeOfOrigin;
    }

    public void setPlaceOfOrigin (String placeOfOrigin)
    {
        this.placeOfOrigin = placeOfOrigin;
    }

    public String getDescription ()
    {
        return description;
    }

    public void setDescription (String description)
    {
        this.description = description;
    }

    public Name getName ()
    {
        return name;
    }

    public void setName (Name name)
    {
        this.name = name;
    }

    public String getImage ()
    {
        return image;
    }

    public void setImage (String image)
    {
        this.image = image;
    }

}

Class Name:

public class Name
{
    private String[] alsoKnownAs;

    private String mainName;

    public String[] getAlsoKnownAs ()
    {
        return alsoKnownAs;
    }

    public void setAlsoKnownAs (String[] alsoKnownAs)
    {
        this.alsoKnownAs = alsoKnownAs;
    }

    public String getMainName ()
    {
        return mainName;
    }

    public void setMainName (String mainName)
    {
        this.mainName = mainName;
    }

}

将JSON解析为对象的功能

public CustomData parseJsonToData(String jsonString) {
    CustomData data = new Gson().fromJson(jsonString, CustomData.class);
    return data;
}

因此您可以通过以下方式获取列表

CustomData data = parseJsonToData(jsonString)
List<String> ingredients = data.getIngredients()