我在PHP和JavaScript之间传递了大量数据。我在php中使用JSON和json_encode,但这里的问题是我传递了很多以字符串形式存储的数字 - 例如,数字如1.2345。
有没有办法直接将数据作为数字(浮点数,整数)传递,而不必将其转换为ASCII然后返回?
谢谢,
答案 0 :(得分:5)
没有。 HTTP是字节流协议(*);任何下来的东西都必须打包成字节。如果你愿意的话,你当然可以使用更紧凑的二进制表示值,但是你的PHP编码和你的JS要解码会有更多的工作。
无论如何,对于小数字的常见情况,文本表示往往非常有效。您的示例1.2345
实际上比字符串(6个字节)小,而不是双精度浮点数(8个字节)。
JSON的发明正是为了允许通过HTTP连接传输非字符串类型。它就像你将要获得的一样无缝。是否有任何理由担心PHP float
和JavaScript Number
之间存在序列化 - >字符串 - >解析步骤?
(*作为字符协议暴露给JavaScript,因为JS没有字节数据类型。通过将JSON响应的字符集设置为iso-8859-1
,您可以使它像纯字节一样工作,但是默认{ {1}}通常更合适。)
答案 1 :(得分:3)
如果您不想使用JSON,还有其他编码选项。从HTTP请求返回的数据是一个八位字节流(而不是7位干净的ASCII流 - 如果是,则无法为UTF-8编码的文档或二进制文件提供服务,作为简单的计数器示例)。
一些二进制序列化/数据协议是ASN.1,Thrift,Google Protocol Buffers,Avro,当然还有一些自定义格式。 JSON的优点是“统一的人类可读的简单性”。
但最终 - JSON是JSON。