Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSON到Java对象而不创建类(PHP方式)_Java_Php_Json_Object - Fatal编程技术网

JSON到Java对象而不创建类(PHP方式)

JSON到Java对象而不创建类(PHP方式),java,php,json,object,Java,Php,Json,Object,我正在处理从twitterapi获取的json数据 在PHP上,我通常会执行以下操作: $data=json\u解码($response) 而$data将是STD类对象 我想用Java做同样的事情 我看了一下Gson,但我需要第二个参数,它似乎需要为获取的数据创建一个特定的类 基本问题是如何将JSON转换为PHP中的标准Java对象(STD类对象) 谢谢Java中没有标准的类对象,因此您需要一个类。您可以在运行时动态创建和编译该类,但我怀疑这是否值得麻烦。如果您的JSON数据没有遵循特定的结构,

我正在处理从twitterapi获取的json数据

在PHP上,我通常会执行以下操作:

$data=json\u解码($response)
$data
将是STD类对象

我想用Java做同样的事情

我看了一下Gson,但我需要第二个参数,它似乎需要为获取的数据创建一个特定的类

基本问题是如何将JSON转换为PHP中的标准Java对象(STD类对象)


谢谢

Java中没有标准的类对象,因此您需要一个类。您可以在运行时动态创建和编译该类,但我怀疑这是否值得麻烦。

如果您的JSON数据没有遵循特定的结构,请不要使用GSON,而是使用常规JSON库(如中的库),该库将为您提供类的实例,如
JSONObject
,当PHP服务器上不存在json_encode时,您可以从中访问数据,如
jsonObject.getString(“key”)

,我使用以下方法:

<?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重写它,那么它应该适合你


参考:(死链接)

使用Jackson将其读入地图,然后您可以访问任何您想要的数据。例如,如果您的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" );
ObjectMapper mapper=new ObjectMapper();
Map mystuff=mapper.readValue(jsonString,Map.class);
字符串名称=(字符串)mystuff.get(“名称”);
字符串city=((Map)mystuff.get(“地址”).get(“城市”);

+1 json.org-在大多数情况下简单且足够(在您的答案中添加了到json.org的链接-希望您不介意),这可以解决问题,但如何访问对象中的嵌套对象?@bn-通过调用
jsonObject.getObject(“key”)
。阅读javadocs。如果你不想拥有一个类,你想如何获得一个对象?也许我不理解您最初的问题,例如,我想访问PHP$data->resultset->result->username中的嵌套对象。我如何在Java中做到这一点?这似乎很简单。我将尝试这个方法。我在几个单元测试中使用了这个方法,测试生成JSON的代码,效果很好。它非常简单,Jackson也很快;给了我一个问题,它是一个对象,而不是字符串。添加了.toString()来修复它