2014-11-13 6 views
0

Можно ли прекратить groovy не сортировать строку JSON, пока она вызывает символьную строку?groovy JSON pretty string не сортировать

Существует программа, которая считывает строку JSON из файла, вносит некоторые изменения в строку JSON и записывает ее обратно в файл.

JSON строка Пример

{ 
    "Obj1": [ 
     { 
      "Val3": "CCIPDS", 
      "Val1": [ 
      { 
       "tn4": "111", 
       "tn1": "222", 
       "moretn": [ 
       { 
        "c6": "ch_ssn", 
        "b5": "ssn" 
       } 
       ] 
      } 
      ] 
     } 
    ] 
} 

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

File jsonFile = new File('JsonFile.json') 
String newJson = new JsonBuilder(jsonStringToWrite).toPrettyString() 
jsonFile.withWriter('UTF-8') 
{ 
    it << newJson 
} 

и строку обновленный следующим образом

{ 
    "Obj1": [ 
     {  
      "Val1": [ 
      { 
       "tn1": "222", 
       "tn4": "111",   
       "moretn": [ 
      { 
       "b5": "ssn", 
       "c6": "ch_ssn"    
      } 
      ] 
     } 
     ], 
     "Val3": "CCIPDS", 
     } 
    ] 
} 

Необходимо остановить сортировку.

+0

Неверные образцы JSON. Вы не можете гарантировать порядок на объекте json, но json array. – dmahapatro

+0

не могли бы вы разместить более полный пример, как вы закончите с этим? '' 'здесь более раздражает, чем helpfup, и это совсем не похоже на json? – cfrick

+0

Образец обновлен, и спасибо за быстрые ответы. Не ожидал отрицательного рейтинга. – aamir

ответ

1

tim_yates упомянул об этом в комментарии, но я повторю здесь и предлагаю немного объяснений. Объекты JSON неупорядочены, упорядочены массивы. Так оно работает с большинством языков/библиотек, включая Javascript. Классы Groovy's JsonSlurper и JsonBuilder используют Карты и списки для представления объектов и массивов JSON соответственно. Цитируя Javadocs for the Map Interface:

Порядка карты определяются как порядок, в котором итераторы на виде коллекционную карты Возвратятся их элементы. Некоторые реализации карт, такие как класс TreeMap, предоставляют конкретные гарантии в отношении их порядка; другие, как и класс HashMap, нет.

Я бы предположил, что ваше приложение не зависит от заказа ключей в JSON. Даже если вы хотите, чтобы заказ был детерминированным, это, скорее всего, приведет к тому, что код трудно читать и поддерживать. Если вам нужно что-то заказать, подумайте о том, чтобы положить его в массив JSON.

+0

спасибо за подробный ответ , – aamir