将数组php转换为java
我正在开发一个包含java文件和php文件的应用程序。java文件调用php文件,这些文件在ddbb中执行查询,并以数组php的形式返回结果,但在屏幕上打印。在java中,我把它当作字符串,我必须将它转换为and数组或集合,但我不知道怎么做 php打印的结果示例如下:将数组php转换为java,java,php,arrays,multidimensional-array,Java,Php,Arrays,Multidimensional Array,我正在开发一个包含java文件和php文件的应用程序。java文件调用php文件,这些文件在ddbb中执行查询,并以数组php的形式返回结果,但在屏幕上打印。在java中,我把它当作字符串,我必须将它转换为and数组或集合,但我不知道怎么做 php打印的结果示例如下: Array ( [0] => Array ( [id] => 1 [0] => 1 [name] => pepe [1] =>
Array
(
[0] => Array
(
[id] => 1
[0] => 1
[name] => pepe
[1] => pepe
)
[1] => Array
(
[id] => 2
[0] => 2
[name] => antoñito
[1] => antoñito
)
[2] => Array
(
[id] => 3
[0] => 3
[name] => loló
[1] => loló
)
[3] => Array
(
[id] => 4
[0] => 4
[name] => ñoño
[1] => ñoño
)
[4] => Array
(
[id] => 5
[0] => 5
[name] => Antoñito
[1] => Antoñito
)
[5] => Array
(
[id] => 7
[0] => 7
[name] => José
[1] => José
)
)
如果我使用json_encode(_数组),结果如下:
[{"id":"1","0":"1","name":"pepe","1":"pepe"}, {"id":"2","0":"2","name":"anto\u00f1ito","1":"anto\u00f1ito"},{"id":"3","0":"3","name":"lol\u00f3","1":"lol\u00f3"},{"id":"4","0":"4","name":"\u00f1o\u00f1o","1":"\u00f1o\u00f1o"},{"id":"5","0":"5","name":"Anto\u00f1ito","1":"Anto\u00f1ito"},{"id":"7","0":"7","name":"Jos\u00e9","1":"Jos\u00e9"}]
谢谢大家我认为这很有用使用一些更标准的传输格式,比如JSON。PHP端必须使用
json\u encode()
对数组进行编码,Java端需要一些库对其进行解码(请参见相关内容)。您应该为数据选择序列化方法。例如,XML或JSON
我个人建议您使用JSON,因为它是轻量级的,甚至对人类来说也很容易阅读,而且两种语言都有多种库可供选择
PHP端的编码
使用Jackson在Java端解码
final ObjectMapper ObjectMapper=new ObjectMapper();
//更好的方法是使用正确的格式创建自定义类
解码的最终映射=objectMapper.readValue(编码的,Map.class);
使用xml或json等交换格式。最好考虑一下您的设计。将数组作为字符串从PHP传递到Java。从Java调用PHP进行数据库访问?所有这些对我来说都很可怕。我试过了,但是当我使用json_enconde时,我丢失了每个奇怪的字符。utf8似乎不适用于that@user1274103这当然有效。JSON序列化会转义非ASCII字符,因此解码时原始字符会返回。我在应用JSON时用结果更新了问题_encode@user1274103是的,正如您所看到的,特殊字符被编码为使用ASCII字符转义序列。这确保了JSON可以通过多种渠道(SMTP、HTTP)轻松安全地传输。当你试图用任何工具解码它时,转义序列就会变成它们以前的UTF-8值(ñ,ó,é)。只要试着用PHP使用json\u decode()
对其进行解码即可。
$encoded = json_encode($data);
final ObjectMapper objectMapper = new ObjectMapper();
// the better way is to create a custom class with the correct format
final Map<?, ?> decoded = objectMapper.readValue(encoded, Map.class);