2010-09-13 5 views
1

[У меня есть код для создания массива JSON. В этом коде я передаю некоторые значения в x, y, z в цикле, который выглядит следующим образом.JSON для Java, кодировать массив JSON - потоковое

JSONArray list = new JSONArray(); 
    String jsonText = null; 
    for (int j = 0; j < 4; j++) { 
     list.add(new Integer(x)); 
     list.add(new Integer(y)); 
     list.add(new Integer(z)); 
     jsonText = list.toString(); 
    } 
    System.out.print(jsonText); 

Это дает выход в

[1234,245,10,312,234,122,1234,67788,345,235,001,332]

Как я могу получить эти значения в одном массиве, как это?

[[1234,245,10],[312,234,122],[1234,67788,345],[235,001,332]]
] Я получил ответ на этот вопрос, который отвечает на вопрос ниже.

Я использовал одно из следующих решений. Спасибо за ответ от вас, ребята.

Теперь я получил JSON формиат вложенных Массивов который выглядит

[ 
[[1234,245,10],[312,234,122],[1234,67788,345],[235,001,332]], 
[[1234,245,10],[312,234,122],[1234,67788,345],[235,001,332],[1234,67788,3450]], 
[[1234,245,10],[312,234,122],[1234,67788,345],[235,001,332],[1234,67788,34534]]] 

SO У меня есть один большой массив, который содержит три массива (это может быть 2 или более трех массивов иногда), и каждый из этих три массива содержит некоторые массивы, в этом примере выше

Что такое обратная процедура? Я имею в виду, что, если я хочу эти значения из этих массивов. Точно так же, как я это сделал. используя JSON Список JSONArray = новый JSONArray(); list.get() этот метод get даст мне то, что я хочу? Я использовал API-интерфейс org.json.

Спасибо, что помогли мне до сих пор.

+0

Это последняя строка (пример вывода) справа? –

+0

Извините, выход - это что-то вроде этого [1234,245,10,312,234,122,1234,67788,345,235,001,332] Можете ли вы рассказать, как получить вышеупомянутый выход, это [1234,245,10] [312,234,122] [1234,67788,345 ] [235,001,332] – jimmy

+0

Вы уверены, что это результат, который вы хотите? Исходя из первоначального вопроса, я ожидал, что желаемый результат будет «[[1234,245,10], [312,234,122], [1234,67788,345], [235,001,332]]' (т. Е. Массив вложенных массивов), а скорее чем '[1234,245,10] [312,234,122] [1234,67788,345] [235,001,332]' (т.е. строка, которая выглядит как массивы без какого-либо разделения). Второй на самом деле не имеет смысла, поскольку он не является надлежащим JSON, если вы не обертываете его в '' 'кавычки, а затем это будет строка, а не серия массивов, обрабатываемых JSON. – Chadwick

ответ

2

Я подозреваю, что вы хотите это синтаксически правильный JSON массив вложенных массивов целых чисел (оригинальный пост запросов недействителен JSON). Если нет, перейдите с @BalusC's answer.

Чтобы получить массив, содержащий подмассивы, просто создайте подмассивы как массивы int[] и добавьте их непосредственно к основному JSONArray.

public int[] getThreeValues() { // example 
    Random r = new Random(); 
    return new int[] { r.nextInt(100), r.nextInt(100), r.nextInt(100) }; 
} 

public void execute() { 

    JSONArray master = new JSONArray(); 

    for (int j=0; j<4; j++) { 
     master.put(getThreeValues()); 
    } 

    System.out.println(master); 
} 

Результат:

[[3,13,37],[24,4,64],[61,2,1],[97,13,86]]

Примечание: Я не уверен, какая библиотека JSON вы используете, так что я использовал org.json Java API, который использует put(...), а не add(...). Кроме того, эта конкретная библиотека поддерживает добавление массивов int [] непосредственно в JSONArray - ваша может не быть, и в этом случае вам нужно будет построить вложенные JSONArrays и добавить их к вашему хозяину.

4

Просто положите его в другой JSONArray.

JSONArray array = new JSONArray(); 
array.add(list); 
String jsonText = array.toString(); 

Update: в соответствии с вашим комментарием:

К сожалению, выход что-то вроде этого

[1234,245,10,312,234,122,1234,67788,345,235,001,332] 

Можете ли вы сказать, как получить выше выход например

[1234,245,10][312,234,122][1234,67788,345][235,001,332] 

Несколько способов:

  1. Concatenate к jsonString.

    String jsonText = ""; // Start with empty string. 
    for (int j = 0; j < 4; j++) { 
        JSONArray list = new JSONArray(); // Create new on each iteration. 
        list.add(new Integer(x)); 
        list.add(new Integer(y)); 
        list.add(new Integer(z)); 
        jsonText += list.toString(); // += concatenates to existing string. 
    } 
    System.out.print(jsonText); 
    
  2. Поскольку Строка конкатенации с помощью += в цикле это память коробления и медленно, а использовать StringBuilder.

    StringBuilder jsonText = new StringBuilder(); 
    for (int j = 0; j < 4; j++) { 
        JSONArray list = new JSONArray(); 
        list.add(new Integer(x)); 
        list.add(new Integer(y)); 
        list.add(new Integer(z)); 
        jsonText.append(list.toString(); 
    } 
    System.out.print(jsonText.toString()); 
    
+0

У меня есть два ответа. У меня есть два разных подхода: один с конкатенацией массивов и один с вложенными массивами. Поэтому я получил решение и так же @ Решение Chadwick. Спасибо за ответы, вы, ребята, гений. за помощь. – jimmy

+0

Это вопрос использования сил логического мышления человека. Однако печально, что ваш первоначальный вопрос был совершенно неправильным. – BalusC

+0

Да, я согласен с тобой, Но, как я сказал, мне нужно использовать как ответы, так и @ Чадвика. Но это мой фокус, что я должен был попросить оба апострофа. Ваш ответ помогает мне со строкой имен, которые ищут. – jimmy

0

Вы всегда можете поместить список внутри JSONArray

например

JSONArray list = new JSONArray(); 
    String jsonText = null; 
    for (int j = 0; j < 4; j++) { 
     list.add(new Integer(x)); 
     list.add(new Integer(y)); 
     list.add(new Integer(z)); 
    } 

    JSONArray finalList = new JSONArray(); 
    finalList.put(0, list); 
    jsonText = finaList.toString(); 
    System.out.print(jsonText); 

Или (не рекомендуется вообще) взломать ваш выход,

например

jsonText += "[" + jsonText + "]"; 
System.out.print(jsonText); 
Смежные вопросы