Вопрос по java, json – Добавить данные в JSONObject

20

Я пытаюсь выяснить, как добавить следующие данные в мой объект json. Может ли кто-нибудь показать мне, как это сделать.

Пример сайта

$(document).ready(function() {
  $('#example').dataTable( {
    "aoColumnDefs": [
     { "aDataSort": [ 0, 1 ], "aTargets": [ 0 ] },
     { "aDataSort": [ 1, 0 ], "aTargets": [ 1 ] },
     { "aDataSort": [ 2, 3, 4 ], "aTargets": [ 2 ] }
   ]
  } );
} );

Мой JSONObject, который должен включать приведенный выше пример.

    JSONObject json = new JSONObject();
    json.put("aoColumnDefs", );

Ваш Ответ

3   ответа
2

Принятый ответ Франциско Spaeth работает и легко следовать. Тем не менее, я думаю, что метод построения JSON отстой! Для меня это было очень важно, так как я преобразовал Python в Java, где я мог использовать словари, вложенные списки и т. Д. Для создания JSON с невероятной легкостью.

Что мне действительно не нравится, так это необходимость создавать отдельные объекты (и вообще даже называть их) для создания этих вложений. Если вам нужно иметь дело с множеством объектов или данных, или если вы используете более абстрактно, это настоящая боль!

Я пытался обойти это, пытаясь очистить и повторно использовать временные объекты и списки json, но это не сработало для меня, потому что все операции ввода-вывода и т. Д. В этих объектах Java работают по ссылке, а не по значению. Таким образом, я в итоге получаю объекты JSON, содержащие кучу данных с ошибками, после того, как у меня все еще остается некрасивый (хотя и по-разному стилизованный) код.

Итак, вот что я придумала, чтобы очистить это. Он может использовать дальнейшее развитие, но это должно помочь в качестве основы для тех из вас, кто ищет более разумный код сборки JSON:

import java.util.AbstractMap.SimpleEntry;
import java.util.ArrayList;
import java.util.List;
import org.json.simple.JSONObject;

//  create and initialize an object 
public static JSONObject buildObject( final SimpleEntry... entries ) { 
    JSONObject object = new JSONObject();
    for( SimpleEntry e : entries ) object.put( e.getKey(), e.getValue() );
    return object;
}

//  nest a list of objects inside another                          
public static void putObjects( final JSONObject parentObject, final String key,
                               final JSONObject... objects ) { 
    List objectList = new ArrayList<JSONObject>();
    for( JSONObject o : objects ) objectList.add( o );
    parentObject.put( key, objectList );
}   

Пример реализации:

JSONObject jsonRequest = new JSONObject();
putObjects( jsonRequest, "parent1Key",
    buildObject( 
        new SimpleEntry( "child1Key1", "someValue" )
      , new SimpleEntry( "child1Key2", "someValue" ) 
    )
  , buildObject( 
        new SimpleEntry( "child2Key1", "someValue" )
      , new SimpleEntry( "child2Key2", "someValue" ) 
    )
);      
29

Чтобы получить такой результат:

{"aoColumnDefs":[{"aTargets":[0],"aDataSort":[0,1]},{"aTargets":[1],"aDataSort":[1,0]},{"aTargets":[2],"aDataSort":[2,3,4]}]}

который содержит те же данные, что и:

  {
    "aoColumnDefs": [
     { "aDataSort": [ 0, 1 ], "aTargets": [ 0 ] },
     { "aDataSort": [ 1, 0 ], "aTargets": [ 1 ] },
     { "aDataSort": [ 2, 3, 4 ], "aTargets": [ 2 ] }
   ]
  }

Вы можете использовать этот код:

    JSONObject jo = new JSONObject();
    Collection<JSONObject> items = new ArrayList<JSONObject>();

    JSONObject item1 = new JSONObject();
    item1.put("aDataSort", new JSONArray(0, 1));
    item1.put("aTargets", new JSONArray(0));
    items.add(item1);
    JSONObject item2 = new JSONObject();
    item2.put("aDataSort", new JSONArray(1, 0));
    item2.put("aTargets", new JSONArray(1));
    items.add(item2);
    JSONObject item3 = new JSONObject();
    item3.put("aDataSort", new JSONArray(2, 3, 4));
    item3.put("aTargets", new JSONArray(2));
    items.add(item3);

    jo.put("aoColumnDefs", new JSONArray(items));

    System.out.println(jo.toString());
Я работаю только с вашим конкретным примером. Code Junkie
Спасибо за вашу помощь, однако я получаю исключение в отношении добавления Arrays.asList в JSONObject java.lang.RuntimeException Свойства JSONObject могут иметь одно из следующих значений: Boolean, Number, String, Есть предложения? Code Junkie
Что вы пытаетесь добавить в эту коллекцию?
Хороший вопрос, я использую каркас Tapestry5, который поставляется в комплекте с Tapestry JSON. Мне придется изучить эту версию, но решение для обеспечения этой работы, по-видимому, было не чем иным, как использованием нового JSONArray (0, 1) вместо Arrays.asList. Code Junkie
какую версию JSON lib вы используете? Я использую это:mvnrepository.com/artifact/org.json/json/20090211 (& Л; зависимость & GT; & Lt; идентификатор_группа & GT; org.json & л; / идентификатор_группа & GT; & Lt; артефакт & GT; JSON & л; / артефакт & GT; & Lt; версия & GT; 20090211 & Lt; / версия & GT; & Lt; / зависимости & GT;)
18

Ответ заключается в использованииJSONArray а также, чтобы погрузиться "глубоко" в древовидную структуру:

JSONArray arr = new JSONArray();
arr.put (...); // a new JSONObject()
arr.put (...); // a new JSONObject()

JSONObject json = new JSONObject();
json.put ("aoColumnDefs",arr);
+1 за хороший и простой ответ, так держать ...;)

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