Вопрос по android, json, arrays – JSON Массив строк (без объектов), извлечение данных

2

У меня есть длинная строка JSON, представляющая массив string [], возвращаемый из службы WCF. Элементы массива - это просто строки, они не являются объектами. Это пример возвращаемых данных

<code>    ["1|ArrayElement1","2|ArrayElement2","3|ArrayElement3"..."n|ArrayElementn"]
</code>

Я не возражаю против включения индекса в строку, но мне нужно проанализировать строки в ArrayList в Android, чтобы я мог адаптировать его к ListView.

Поскольку эти технически не являются объектами JSONObject, как я могу выполнить итерацию по ним и извлечь строку из каждого элемента массива?

Я немного сбит с толку. WCF возвращает строку, отформатированную в виде массива JSON или фактического массива строк? Если это массив, почему бы вам просто не повторить каждыйarray element, вырезать индекс и запустить функцию десериализации JSON для полученной строки? Spencer Ruport

Ваш Ответ

3   ответа
8

обычно вы можете разобрать его следующим образом

JSONArray jsonStrings = json.getJSONArray("items");
String strings[] = new String[jsonStrings.length()];
for(int i=0;i<strings.length;i++) {
strings[i] = jsonStrings.getString(i);
}
Error: User Rate Limit Exceeded SmashCode
0

JSON Array итерация в 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));
        }
    }
Error: User Rate Limit Exceeded SmashCode
Error: User Rate Limit Exceeded
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

Похожие вопросы