2013-06-06 3 views
0

Я получаю от строк JSON из внешнего источника (базы данных), которые мне нужно собрать вместе в результат, который является Map (ключ - это ключ записи, а значение - это строка, которая включает в себя форматированные данные Json). Так, например, я буду получать 3 записей из БД следующим образом:Добавление строк JSON прозрачно на карту/список

"record1", "{ "type":"recType1", "data": "somedata" }" 
"record2", "{ "type":"recType1", "data": "someotherdata" }" 
"recrod3", "{ "type":"recType1", "data": "yetanotherdata" }" 

Я не хочу, чтобы разобрать данные о jsons в ответах (нет необходимости). Если я добавлю их как «String», то я получу «escaped (\»), что является проблемой, конечно. Например, record1 значение сверху будет выглядеть следующим образом:

"{ \"type\":\"recType1\", \"data\": \"somedata\" }" 

Как создать результирующую JSON, который объединяет их всех? Есть ли способ добавить что-то «прозрачно» без его обработки внутренним сериализатором, который ускользает от содержимого значения?

+0

Ваш первый экстракт не является действительным JSON что такое настоящая JSON – fge

+0

, когда вы набрали gson вы, возможно, имели в виду JSON – VoronoiPotato

+0

у вас есть код, который представляет собой попытку – VoronoiPotato

ответ

0

Самый простой способ, которым я могу думать о функции Eval(), здесь приведен пример использования вашего объекта JSon:

eval("result= { \"type\":\"recType1\", \"data\": \"somedata\" }") 
document.write(result["type"]); 

Это будет разобрать ваш объект как яваскрипта код, и вы можете получить ваши ценности. Cheers.

+0

желаемый результат:.?? – zmashiah

+0

что такое желаемый результат? –

0

Вы можете создать Java-класс для объекта, который вы получаете от JSON, ИСПОЛЬЗОВАТЬ API GSON 2.0 для его анализа на Java-объект ArrayList.

Извлеките его и создайте КАРТУ.

Примечание: GSON 2.0 позаботился о том, чтобы все данные были правильно проанализированы в соответствии с вашим классом.

+0

Разбор JSON Я получаю от базы данных se не желательно, в основном для производительности. Желаемый результат кодирования записей выборки будет (2 элемента не 3) [{«type»: «recType1», «data»: «somedata»}, {«type»: «recordType1», «data»: «someotherdata» "}] НО, когда я делаю это через Set , я получаю вместо этого JSON, который выглядит так: [" {\ "type \: \" recordType1 \ ", \" data \ ": \" somedata \ "} "," {\ "type \": \ "recordType1 \", \ "data \": \ "someotherdata \"} "]. Таким образом, клиенту результата нужно будет сначала распаковать каждый элемент в виде строки перед распаковкой данных – zmashiah

0

Ниже приведен пример кода, который показывает проблему:

public Set<String> doQuery(String query) 
    { 
     Set<String> result = new LinkedHashSet<>(); 
     boolean haveMore = true; 

     while(haveMore) 
     { 
      String entry = DB.read(query); 
      if (entry != null) 
       result.add(entry); 
      else 
       haveMore = false; 
     } 
     return result; 
    } 


    public Map<String, Object> generateReport(String query) 
    { 
     Map<String, Object> report = new LinkedHashMap<>(); 
     Set<String> result = doQuery(query); 
     if (result != null) 
     { 
      if (result.size() != 0) 
      { 
       report.put("result", "success"); 
       report.put("query", query); 
       report.put("count", result.size()); 
       report.put("objects", result); 
      } 
      else 
       return null; 
     } 
     return report; 
    } 

    public String getReportAsJson(String query) 
    { 
     Map<String, Object> report = generateReport(query); 
     if (report != null) 
     { 
      Gson g = new Gson(); 
      return g.toJson(report); 
     } 
     return "{ \"result\": \"fail\" }"; 
    } 

Если брать результат каждый Json документ извлекается из БД сериализован в виде строки с карты, и в результате все "в Json экранируются .