JSONArray解析不适用于https链接

时间:2018-08-08 09:23:24

标签: android json parsing

我面临一个奇怪的问题。我试图将以下STRING转换为字符串数组:[https://www.facebook.com,https://www.twitter.com,https://www.google.com]

使用:

JSONArray jsonArray = new JSONArray(vendorDetail.getSocialNetwork());
        String[] strArr = new String[jsonArray.length()];

        for (int i = 0; i < jsonArray.length(); i++) {
            strArr[i] = jsonArray.getString(i);
        }


        if(strArr.length >= 1){
            fbLink= strArr[0];
        }

        if(strArr.length >= 2){
            twitterLink = strArr[1];
        }

        if(strArr.length >= 3){
            googleLink = strArr[2];
        }

并收到以下错误:org.json.JSONException:[https://www.facebook.com,https://www.twitter.com,https://www.google.com]字符7处的无终止数组

注意:我正在从服务器端响应中获取字符串。应该将其转换为String数组

4 个答案:

答案 0 :(得分:0)

str.split()可以将str更改为StringArray。以下是演示

public void test(){

    String str = "[https://www.facebook.com,https://www.twitter.com,https://www.google.com]";
    str2Array(str);
}

private String[] str2Array(String str){

    if (str != null && str.length()>=2){
        str = str.substring(1,str.length()-1);
        String[] strArr = str.split(",");
        return strArr;
    }
    return null;
}

答案 1 :(得分:0)

您可以使用字符串类的split()方法获得结果。

尝试一下:

String s = "[https://www.facebook.com,https://www.twitter.com,https://www.google.com]";
    s = s.replaceAll("\\[", "").replaceAll("\\]", "");
    Log.e("My Replaced String", s);

    String[] split = s.split(",");
    for (String s1 : split) {
        Log.e("My Split String", s1);
    }

答案 2 :(得分:0)

正如您提到的那样,您将收到以下错误:org.json.JSONException:字符

处的终止数组

因为您拥有数组

[https://www.facebook.com,https://www.twitter.com,https://www.google.com]

这是不正确的,正确的JSONArray是

["https://www.facebook.com","https://www.twitter.com","https://www.google.com"] 

如果您有以下来自json ["https://www.facebook.com","https://www.twitter.com","https://www.google.com"]的数组,并且需要在String中使用它,则可以按照

try {
        String data= your JSONArray;
        JSONArray jsonArray=new JSONArray(data);
        for(int i=0;i<jsonArray.length();i++)
        {
            switch (i)
            {
                case 0:
                    String facebook=jsonArray.getString(i);
                    break;
                case 1:
                    String twitter=jsonArray.getString(i);
                    break;
                case 2:
                    String google=jsonArray.getString(i);
                    break;
            }

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

要验证任何JSON,您可以在此网站http://json.parser.online.fr/

答案 3 :(得分:0)

如果您的回复是

案例 1

<块引用>

"[https://www.facebook.com,https://www.twitter.com,https://www.google.com]"

然后尝试简单的一行代码将其转换为字符串数组

var str = "[https://www.facebook.com,https://www.twitter.com,https://www.google.com]";
str.replace(/^\[/,"").replace(/]$/,"").split(",");

输出将是

["https://www.facebook.com"、"https://www.twitter.com"、"https://www.google.com"]

案例 2

如果您的回复是

<块引用>

'["https://www.facebook.com", "https://www.twitter.com", "https://www.google.com"]'

那么您的代码将绝对有效。