JSON字符串数组(无对象),提取数据

时间:2012-04-13 20:25:42

标签: android json android-listview arrays

我有一个很长的JSON字符串,表示从WCF服务返回的string []数组。数组元素只是字符串,它们不是对象。这是返回数据的示例

    ["1|ArrayElement1","2|ArrayElement2","3|ArrayElement3"..."n|ArrayElementn"]

我不介意索引包含在字符串中,但我需要将字符串解析为Android中的ArrayList,以便我可以将其调整为ListView。

由于这些技术上不是JSONObjects,我如何迭代它们并从每个数组元素中提取字符串?

3 个答案:

答案 0 :(得分:8)

这是一个有效的JSON字符串数组,你可以像这样解析它

JSONArray jsonStrings = json.getJSONArray("items");
String strings[] = new String[jsonStrings.length()];
for(int i=0;i<strings.length;i++) {
strings[i] = jsonStrings.getString(i);
}

答案 1 :(得分:0)

也许这篇文章可以帮助你:

JSON Array iteration in Android/Java

  HashMap<String, String> applicationSettings = new HashMap<String,String>();
    for(int i = 0; i < settings.length(); i++){
        String value = settings.getJSONObject(i).getString("value");
        String name = settings.getJSONObject(i).getString("name");
        applicationSettings.put(name, value);
    }

 JSONArray names= json.names();
    JSONArray values = json.toJSONArray(names);
    for(int i = 0 ; i < values.length(); i++){
        if(names.getString(i).equals("description")){
            setDescription(values.getString(i));
        }
        else if(names.getString(i).equals("expiryDate")){
            String dateString = values.getString(i);
            setExpiryDate(stringToDateHelper(dateString)); 
        }
        else if(names.getString(i).equals("id")){
            setId(values.getLong(i));
        }
        else if(names.getString(i).equals("offerCode")){
            setOfferCode(values.getString(i));
        }
        else if(names.getString(i).equals("startDate")){
            String dateString = values.getString(i);
            setStartDate(stringToDateHelper(dateString));
        }
        else if(names.getString(i).equals("title")){
            setTitle(values.getString(i));
        }
    }

答案 2 :(得分:0)

只是为了澄清一下,据我所知,你收到的是一个字符串的JSON数组,这些字符串是前缀为数组索引和管道字符的有效JSON字符串?

首先,我建议联系这个憎恶的创造者并在违反标准的情况下讲授他们。如果他们不听,就和他们的老板谈谈。在我看来,这种事情是不可接受的,需要停止。

其次,我建议做这样的事情:

string[] element_strings = JSON.deserialize(WCF_string_result);
object[] elements = new object[element_strings.length];
for(int x = 0; x < elements.length; x++)
{
    int pipeIndex = element_strings.indexOf("|");
    elements[x] = JSON.deserialize(element_strings[x].substr(pipeIndex + 1));
}

当然,这假设你有一些方法来反序列化JSON对象的字符串。如果您不这样做,我建议您使用Android中提供的内置库:

http://developer.android.com/reference/org/json/package-summary.html