2012-04-25 3 views
22

Я хочу, чтобы преобразовать следующую строку JSON в Java объект:Как преобразовать следующую строку json в объект java?

String jsonString = "{ 
"libraryname":"My Library", 
"mymusic":[{"Artist Name":"Aaron","Song Name":"Beautiful"}, 
{"Artist Name":"Britney","Song Name":"Oops I did It Again"}, 
{"Artist Name":"Britney","Song Name":"Stronger"}]}" 

Моя цель состоит в том, чтобы получить доступ к нему легко что-то вроде:

(e.g. MyJsonObject myobj = new MyJsonObject(jsonString) 
myobj.myrows[0].id would give me the ID, myobj.libraryname gives me "My Library"). 

Я слышал о Джексоне, но я не уверен, как использовать его, чтобы соответствовать json-строке, с которой у меня есть не только ключевые пары значений из-за включенного списка «mymusic». Как я могу выполнить это с Джексоном или есть какой-то более простой способ, которым я могу это сделать, если Джексон не лучший для этого?

+0

возможно дубликат [? Преобразовать строку JSON на объект в Java] (http://stackoverflow.com/questions/1395551/convert-a-json-string-to-object-in -java) – bummi

ответ

60

Нет необходимости идти с GSON для этого; Джексон может сделать либо простые карты/Списки:

ObjectMapper mapper = new ObjectMapper(); 
Map<String,Object> map = mapper.readValue(json, Map.class); 

или более удобный JSON дерево:

JsonNode rootNode = mapper.readTree(json); 

Кстати, нет никаких причин, почему вы не могли фактически создавать классы Java и сделать это (ИМО) более удобно:

public class Library { 
    @JsonProperty("libraryname") 
    public String name; 

    @JsonProperty("mymusic") 
    public List<Song> songs; 
} 
public class Song { 
    @JsonProperty("Artist Name") public String artistName; 
    @JsonProperty("Song Name") public String songName; 
} 

Library lib = mapper.readValue(jsonString, Library.class); 
+0

Я получил решение от вашего кода. спасибо –

+0

Я попытался отправить этот тип json-строки с помощью jackson, но он возвращает только нулевые значения, '[{" id ": 62," name ":" projectname1 "," batchClassId ": 1283," batchClassName ":" sample_batchclass26 " , "assetCount": 0}, {"id": 8, "name": "projectname_tmp", "batchClassId": 1283, "batchClassName": "sample_batchclass26", "assetCount": 0}] ' –

+0

Это JSON Array, поэтому он должен быть привязан к Java 'Collection' (например,' List') или массиву (может использоваться тип 'Object []. Class'). Или просто 'java.lang.Object' (будет иметь тип' List'). Все будет хорошо. – StaxMan

0

Gson также хорош для него: http://code.google.com/p/google-gson/

" Gson это библиотека Java, которая может быть использована для преобразования объектов Java в их JSON представления Он также может быть использован для преобразования строки JSON в эквивалентный Java. . объект Gson может работать с любыми объектами Java, включая уже существующие объекты, которые не имеют исходный код "

Проверьте примеры API:. https://sites.google.com/site/gson/gson-user-guide#TOC-Overview Других примеров: http://www.mkyong.com/java/how-do-convert-java-object-to-from-json-format-gson-api/

4

Заканчивать Gson Google: http://code.google.com/p/google-gson/

С их сайта:

Gson gson = new Gson(); // Or use new GsonBuilder().create(); 
MyType target2 = gson.fromJson(json, MyType.class); // deserializes json into target2 

Вам просто нужно будет сделать класс MyType (переименованный, конечно) со всеми полями в строке JSon. Это может немного усложниться, когда вы делаете массивы, если вы предпочитаете вручную выполнять парсинг (также довольно легко), зайдите в http://www.json.org/ и загрузите источник Java для парсеров Json.

+0

, который работает как шарм –

Смежные вопросы