GSON / Jackson в Android

#java #android #json #gson #jackson

#java #Android #json #gson #джексон

Вопрос:

Я смог успешно проанализировать приведенную ниже строку JSON в Android, используя JSONObject и JSONArray. Не удалось добиться того же результата с помощью GSON или Jackson. Может ли кто-нибудь помочь мне с фрагментами кода, включая определения POJO, для анализа этого с помощью GSON и Jackson?

 {
    "response":{
        "status":200
    },
    "items":[
        {
            "item":{
                "body":"Computing"
                "subject":"Math"
                "attachment":false,
        }
    },
    {
        "item":{
           "body":"Analytics"
           "subject":"Quant"
           "attachment":true,
        }
    },

],
"score":10,
 "thesis":{
        "submitted":false,
        "title":"Masters"
        "field":"Sciences",        
    }
}
 

Комментарии:

1. Может быть, вы могли бы включить определения POJO, которые вы пробовали, чтобы дать представление о том, что могло пойти не так? Основная идея состоит в том, чтобы просто сопоставить структуры.

2. Кроме того, при публикации вопроса я рекомендую приложить усилия, чтобы убедиться, что любой код или примеры JSON являются действительными и правильными. Пример JSON в исходном вопросе недействителен и оставляет людей, которые могли бы помочь или извлечь уроки из этой темы, гадать о том, что к чему. jsonlint.com может использоваться для быстрой и простой проверки JSON.

Ответ №1:

Ниже приведены простые примеры использования Gson и Jackson для десериализации / сериализации JSON (аналогично недопустимому JSON в исходном вопросе) в / из соответствующей структуры данных Java.

JSON — файл:

 {
    "response": {
        "status": 200
    },
    "items": [
        {
            "item": {
                "body": "Computing",
                "subject": "Math",
                "attachment": false
            }
        },
        {
            "item": {
                "body": "Analytics",
                "subject": "Quant",
                "attachment": true
            }
        }
    ],
    "score": 10,
    "thesis": {
        "submitted": false,
        "title": "Masters",
        "field": "Sciences"
    }
}
 

Соответствующая структура данных Java:

 class Thing
{
  Response response;
  ItemWrapper[] items;
  int score;
  Thesis thesis;
}

class Response
{
  int status;
}

class ItemWrapper
{
  Item item;
}

class Item
{
  String body;
  String subject;
  boolean attachment;
}

class Thesis
{
  boolean submitted;
  String title;
  String field;
}
 

Пример Джексона:

 import java.io.File;

import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
import org.codehaus.jackson.map.ObjectMapper;

public class JacksonFoo
{
  public static void main(String[] args) throws Exception
  {
    ObjectMapper mapper = new ObjectMapper();  
    mapper.setVisibilityChecker(  
      mapper.getVisibilityChecker()  
        .withFieldVisibility(Visibility.ANY));
    Thing thing = mapper.readValue(new File("input.json"), Thing.class);
    System.out.println(mapper.writeValueAsString(thing));
  }
}
 

Пример Gson:

 import java.io.FileReader;

import com.google.gson.Gson;

public class GsonFoo
{
  public static void main(String[] args) throws Exception
  {
    Gson gson = new Gson();
    Thing thing = gson.fromJson(new FileReader("input.json"), Thing.class);
    System.out.println(gson.toJson(thing));
  }
}