Создание файла JSON и добавление узлов в структуру типа дерева JSON - PullRequest
1 голос
/ 24 февраля 2011

Я пишу приложение, которое создает JSON-файл следующей структуры:

{
  identifier:"id",
label:"name",
items:[
  {
     id:"ROOT",
     name:"Parent1",
     type:"ROOT",
     children:[
        {
           _reference:"CHILD1"
        }
     ]
  },
  {
     id:"CHILD1",
     name:"Parent1-Child1",
     type:"Child",
     children:[
        {
           _reference:"CHILD2"
        }
     ]
  },
  {
     id:"CHILD2",
     name:"Child1-Child2",
     type:"Child",
     children:[
        {
           _reference:"Child3"
        },
        {
           _reference:"Child4"
        }
     ]
  },
  {
     id:"Child3",
     name:"Child2-Child3",
     type:"GrandChild"
  },
  {
     id:"Child4",
     name:"Child2-Child4",
     type:"GrandChild"
  },

]
}

Таким образом, мое приложение фактически получает следующие данные для каждого узла этого дерева JSON

PID-- Itк которому я должен прикрепить CID дочернего узла - ID дочернего узла CNAME - имя дочернего узла CTYPE - дочерний тип

Так что в настоящее время я занимаюсь поиском PID в файле json путем итерации (в файловой системе), и как только я нахожу строку, которая имеет id = PID, я добавляю дочерний Ref к этому узлу

    {
       _reference:"CHILD-NEXT"
    }

, а затем после этой строки добавляю весь новый дочерний узел

{
 id:"CHILD-NEXT",
 name:"Parent1-ChildNext",
 type:"Child",
},

Но это очень неэффективное решение из-за итерации файла каждый раз для поиска родительского узла и добавления / вставки дочернего элемента.

Так что я ищу некое решение, в котором я просто создаю этот JSONструктура в памяти, и когда я закончу с добавлением всех узлов, я могу записать его в файл.Я делаю это в JAVA, поэтому я ищу некоторые существующие библиотеки JSON, которые я могу использовать для выполнения этого требования.

Пожалуйста, прокомментируйте, если вам нужна какая-либо другая информация из приведенного выше объяснения, неясно.

Ответы [ 2 ]

3 голосов
/ 24 февраля 2011

Для этого вы можете использовать библиотеку org.json .

Сначала вам нужно прочитать файл json в JSONObject, который в основном состоит из пар ключ / значение.и массивы.Затем вы можете перебрать элементы в объекте, найти pid и добавить нового потомка.

Вот пример кода, с которого можно начать:

//read file        
BufferedReader in = new BufferedReader(new FileReader("path/json.txt"));
String line;
StringBuilder sb = new StringBuilder();
while((line =in.readLine()) != null){
    sb.append(line);
}
in.close();


//create a json object
JSONObject json = new JSONObject(sb.toString());

//pid to search for
String pid = "XXX";

//loop over the items array and look for pid
JSONArray items = json.getJSONArray("items");
for(int i = 0 ; i < items.length(); i++){
    JSONObject item = items.getJSONObject(i);
    String id = item.getString("id");
    if(pid.equals(id)){

        //get the children
        JSONArray children;
        if(item.has("children")){
            children = item.getJSONArray("children");    
        }
        else{
            children = new JSONArray();
            item.put("children", children);
        }

        //append a new child ref to the children
        JSONObject ref = new JSONObject();
        ref.put("_reference", "CHILD-NEXT");
        children.put(ref);

        //create a new child node
        JSONObject newItem = new JSONObject();
        newItem.put("id", "CHILD-NEXT");
        newItem.put("name", "Parent1-ChildNext");
        newItem.put("type", "Child");
        items.put(newItem);
    }
}
1 голос
/ 24 февраля 2011

На JSON.org у вас есть JSON на Java , который предоставит вам представление JSON в памяти, которое вы можете манипулировать и затем писать.

Этот вопрос StackOverflow содержит полный список библиотек JSON для Java, включая google-gson , JSONlib , FlexJSON , Джексон , json-simple и еще больше в этом обзоре блога .

В зависимости от того, нацелены ли вы на полнофункциональный, легкий или быстрый, вы можете найти один или другой вариант, более подходящий для ваших нужд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...