如何在Android中将字符串化的数组转换为ArrayList

5

我从服务器获取到了这个内容

"[\"abc\",\"def\",\"ghi\",\"jkl\",\"mno\",\"pqr\",\"stu\",\"vwx\",\"yz\"]"

上面的文本不是数组,而是从服务器返回的字符串。

我希望将其转换为ArrayList。

有没有办法进行转换?


3
为什么需要将其转换为字符串?直接使用 JSON 就好了。尝试使用 GSON 将其解析为数组。 - vanlooverenkoen
你正在使用哪个库来解析JSON数据,是GSON吗? - Awadesh
实际上,我从服务器响应中得到了以下内容: { "error": false, "data": "["abc","def","ghi","jkl","mno","pqr","stu","vwx","yz"]" "timeStamp": 1484203469568 } - Pawanpreet Singh
7个回答

3
可以使用分隔符来实现,其中 s 为字符串:
List<String> myList = new ArrayList<String>(Arrays.asList(s.split(",")));

如果其中一个字符串包含逗号“,”,这段代码也会失败。 - AbdulKarim

3

手动解析该字符串并没有好的方法。您应该使用一个库来为您解析JSON字符串。无论如何,给定的字符串不是有效的JSON字符串,正如其他人所提到的,您应该从服务器请求JSON格式的数据。

如果您的服务器只返回这样的数据,并且您需要手动解析,则可以使用以下解决方案。虽然不是非常好的解决方案,但它可以完成工作。

public static void main(String[] args) {
    List<String> words = new ArrayList<>();
    String string = "[\"abc\",\"def\",\"ghi\",\"jkl\",\"mno\",\"pqr\",\"stu\",\"vwx\",\"yz\"]";

    String withoutBrackets = string.replaceAll("[\\[\\](){}]", ""); // Remove all the brackets
    for (String word : withoutBrackets.split(",")) {
        String singleWord = word.replaceAll("\"", "");
        words.add(singleWord);
    }

    System.out.println(words);
}

如果其中一个字符串包含逗号“,”,则此代码将失败。 - AbdulKarim

2
尝试使用Gson。将以下代码添加到您的Gradle文件中:
compile 'com.google.code.gson:gson:2.2.4'

希望这能帮到你 -
String str = "[\"abc\",\"def\",\"ghi\",\"jkl\",\"mno\",\"pqr\",\"stu\",\"vwx\",\"yz\"]";
Gson gson=new Gson();
ArrayList<String> strings = gson.fromJson(str,new TypeToken<ArrayList<String>>(){}.getType());

1
修改您的字符串使用。
     str = str.replace ("[", "").replace ("]", "");

所以它与

    String str = "\"abc\",\"def\",\"ghi\",\"jkl\",\"mno\",\"pqr\",\"stu\",\"vwx\",\"yz\"";

然后使用


    List<String> al = new ArrayList<String>(Arrays.asList(str.split(",")));

    System.out.println(al);

1

这将会有效

String text = [\"abc\",\"def\",\"ghi\",\"jkl\",\"mno\",\"pqr\",\"stu\",\"vwx\",\"yz\"]";
text = text.replaceAll("[\\[\\](){}\"]", "");
List<String> list = Arrays.asList(text.split(","));

0

这是将JSON字符串解析为ArrayList的正确方法 :)

 ArrayList<String> list = new ArrayList<String>();
         String newArrayy ="[\"abc\",\"def\",\"ghi\",\"jkl\",\"mno\",\"pqr\",\"stu\",\"vwx\",\"yz\"]";
                  imagePath = newArrayy;
                            try {
                                JSONArray jsonArray = new JSONArray(imagePath);
                                if (null != jsonArray) {
                                    Logger.LogError("imagePathhh", jsonArray.toString() + "" + jsonArray.length());
 for (int i = 0; i < jsonArray.length(); i++) {           
    String value =(String) jsonArray.getString(i);
       list.add(value);                        dataBaseCurdOperation.insertPaymentPath(jsonArray.getString(i));
                                    }
                                } else {

                                }
                            } catch (Exception e) {

                            }
                        }

这些函数在执行什么操作:hidingImage(imageCount); dataBaseCurdOperation.insertPaymentPath(jsonArray.getString(i)); - Pawanpreet Singh
这些是我在我的代码中使用的个人方法:D - Ankita Singh

-1

Sanjay在他的回答中指出了正确的问题,即它不是正确的格式。

但如果您正在使用Gson库来解析JSON数据,则以下方法也可以处理此格式。因此,您无需做任何事情:)

new Gson().fromJson(your_server_response, Model.class);

还有一种方法是使用Java的内置方法

public String replaceAll (String regularExpression, String replacement)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接