2013-06-04 5 views
2

Я хочу разобрать json с сервера и поместить его в класс. Для этого я использую json4s. Проблема в том, что json-объект содержит слишком много полей, из них около 40-50, некоторые из них имеют длинные имена.Разбор объекта json, который имеет много полей

Интересно, что будет разумным способом их хранения, должен ли я создать 40-50 полей в классе? Помните, что некоторые из них будут иметь длинные имена, как я сказал ранее.

Я использую Scala, но подход Java может быть похож на него, поэтому я добавил также тег Java.

ответ

1

Я не знаю json4s, но в Джерси с Джексоном, например, вы можете использовать Map для хранения данных Json, или вы можете использовать POJO со всеми этими именами.

Иногда его лучше иметь имена. Это значительно упрощает понимание кода.

Иногда его лучше использовать Map. Например, если имена полей меняются время от времени.

Если я помню правильно, используя чистый Джексон вы сделать что-то вроде этого:

String jsonString = ....; // This is the string of JSON stuff 
JsonFactory factory = new JsonFactory(); 
ObjectMapper mapper = new ObjectMapper(factory); // A Jackson class 
Map<String,Object> data = mapper.readValue(jsonString, HashMap.class); 

Вы можете использовать TypeReference, чтобы сделать его немного чище, что касается дженерики. Джексон сообщает об этом больше. Существует также больше здесь: StackOverflow: JSON to Map

+0

Карта ... Я забыл об этом. –

+0

Как извлечь объект json в Map [String, Any]? –

+0

Добавлена ​​информация о Jackson, но ее Java, а не Scala. –

1

Существует, как правило, два способа разбора json для объекта 1) Разберите json для представления объекта. другой, который может вам подойдет, поскольку вы упоминаете, что у вашего объекта слишком много полей - это amap/hashtable, или вы можете просто сохранить его как JObject, получить поля, которые вам нужны.

+0

Как я могу получить их от JObject и почему это удобнее? –

+0

смотрите здесь http://www.scala-lang.org/api/current/index.html#scala.util.parsing.json.JSONObject возвращает карту в val – varun

+0

ее удобной, когда вы бросаете объект непосредственно в оболочку, такую ​​как [parse ("" "{" numbers ": [1, 2, 3, 4]}" "")], который, в свою очередь, позволяет вам получить доступ к ключевому значению, подобному кораблю отношений, я использовал подобную технику в json.net , На самом деле нет большой разницы. – varun

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