JSON to Java Object без создания класса (путь PHP) - PullRequest
1 голос
/ 08 декабря 2011

Я имею дело с данными JSON, полученными из Twitter API

на PHP я обычно делаю что-то вроде:

$data = json_decode($response); и $data будет объектом класса STD

Я хочу сделать то же самое в Java.

Я посмотрел на Gson, но мне нужен второй аргумент, который, похоже, должен создать конкретный класс для извлеченных данных.

Основной вопрос заключается в том, как преобразовать JSON в стандартный объект Java, как в PHP (объект класса STD)

Спасибо

Ответы [ 4 ]

3 голосов
/ 08 декабря 2011

Считайте это в карту, используя Джексона, тогда вы сможете получить доступ к любым данным, которые вы хотите. Например, если ваш json выглядит так

{ "name":"blah",
  "address": {
    "line1": "1234 my street",
    "city": "my city",
    "state": "my state"
  }
}

Тогда вы могли бы:

ObjectMapper mapper = new ObjectMapper();
Map<String, Object> mystuff = mapper.readValue( jsonString, Map.class );
String name = (String)mystuff.get("name");
String city = ((Map<String, Object>)mystuff.get( "address" )).get( "city" );
3 голосов
/ 08 декабря 2011

Если ваши данные JSON не соответствуют определенной структуре, не используйте GSON, а обычную библиотеку JSON (например, из json.org ), которая даст вам экземпляр класса, подобногоJSONObject, из которого вы можете получить доступ к таким данным, как jsonObject.getString("key").

0 голосов
/ 08 декабря 2011

Когда json_encode не существует на PHP-сервере, я использую это:

<?php
if (!function_exists('json_encode'))
{
  function json_encode($a=false)
  {
    if (is_null($a)) return 'null';
    if ($a === false) return 'false';
    if ($a === true) return 'true';
    if (is_scalar($a))
    {
      if (is_float($a))
      {
        // Always use "." for floats.
        return floatval(str_replace(",", ".", strval($a)));
      }

      if (is_string($a))
      {
        static $jsonReplaces = array(array("\\", "/", "\n", "\t", "\r", "\b", "\f", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"'));
        return '"' . str_replace($jsonReplaces[0], $jsonReplaces[1], $a) . '"';
      }
      else
        return $a;
    }
    $isList = true;
    for ($i = 0, reset($a); $i < count($a); $i++, next($a))
    {
      if (key($a) !== $i)
      {
        $isList = false;
        break;
      }
    }
    $result = array();
    if ($isList)
    {
      foreach ($a as $v) $result[] = json_encode($v);
      return '[' . join(',', $result) . ']';
    }
    else
    {
      foreach ($a as $k => $v) $result[] = json_encode($k).':'.json_encode($v);
      return '{' . join(',', $result) . '}';
    }
  }
}
?>

Если вы могли бы переписать это на Java, то это должно помочь вам.

Ссылка: (мертвая ссылка) http://snippets.dzone.com/posts/show/7487

0 голосов
/ 08 декабря 2011

В Java нет стандартного объекта класса, поэтому вам нужен класс.Вы можете динамически создавать и компилировать класс во время выполнения, но я сомневаюсь, что это стоит того.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...