当前位置: 首页 > 编程笔记 >

PHP 编码JSON字符串

戚升
2023-03-14
本文向大家介绍PHP 编码JSON字符串,包括了PHP 编码JSON字符串的使用技巧和注意事项,需要的朋友参考一下

示例

该json_encode函数会将一个PHP数组(或者,从PHP 5.4开始,一个实现该JsonSerializable接口的对象)转换为JSON编码的字符串。如果成功,则返回JSON编码的字符串;如果失败,则返回FALSE。

$array = [
    'name' => 'Jeff',
    'age' => 20,
    'active' => true,
    'colors' => ['red', 'blue'],
    'values' => [0=>'foo', 3=>'bar'],
];

在编码期间,PHP数据类型string,integer和boolean将转换为它们的JSON等效项。关联数组被编码为JSON对象,并且-当使用默认参数调用时-索引数组被编码为JSON数组。(除非数组键不是从0开始的连续数字序列,在这种情况下,数组将被编码为JSON对象。)

echo json_encode($array);

输出:

{"name":"Jeff","age":20,"active":true,"colors":["red","blue"],"values":{"0":"foo","3":"bar"}}

争论

从PHP 5.3开始,to的第二个参数json_encode是位掩码,可以是以下项中的一个或多个。

与任何位掩码一样,它们可以与二进制OR运算符结合使用|。

PHP 5.x 5.3

JSON_FORCE_OBJECT

强制创建对象而不是数组

$array = ['Joel', 23, true, ['red', 'blue']];
echo json_encode($array);
echo json_encode($array, JSON_FORCE_OBJECT);

输出:

["Joel",23,true,["red","blue"]]
{"0":"Joel","1":23,"2":true,"3":{"0":"red","1":"blue"}}

JSON_HEX_TAG,JSON_HEX_AMP,JSON_HEX_APOS,JSON_HEX_QUOT

在编码过程中确保以下转换:

不变 输入值 输出结果
JSON_HEX_TAG < \u003C
JSON_HEX_TAG > \u003E
JSON_HEX_AMP & \u0026
JSON_HEX_APOS ' \u0027
JSON_HEX_QUOT " \u0022
$array = ["tag"=>"<>", "amp"=>"&", "apos"=>"'", "quot"=>"\""];
echo json_encode($array);
echo json_encode($array, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT);

输出:

{"tag":"<>","amp":"&","apos":"'","quot":"\""}
{"tag":"\u003C\u003E","amp":"\u0026","apos":"\u0027","quot":"\u0022"}
PHP 5.x 5.3

JSON_NUMERIC_CHECK

确保将数字字符串转换为整数。

$array = ['23452', 23452];
echo json_encode($array);
echo json_encode($array, JSON_NUMERIC_CHECK);

输出:

["23452",23452]    
[23452,23452]
PHP 5.x 5.4

JSON_PRETTY_PRINT

使JSON易于阅读

$array = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4];
echo json_encode($array);
echo json_encode($array, JSON_PRETTY_PRINT);

输出:

{"a":1,"b":2,"c":3,"d":4}
{
    "a": 1,
    "b": 2,
    "c": 3,
    "d": 4
}

JSON_UNESCAPED_SLASHES

/在输出中包含未转义的正斜杠

$array = ['filename' => 'example.txt', 'path' => '/full/path/to/file/'];
echo json_encode($array);
echo json_encode($array, JSON_UNESCAPED_SLASHES);

输出:

{"filename":"example.txt","path":"\/full\/path\/to\/file"}
{"filename":"example.txt","path":"/full/path/to/file"}

JSON_UNESCAPED_UNICODE

在输出中包括UTF8编码的字符,而不是\u-encoded字符串

$blues = ["english"=>"blue", "norwegian"=>"blå", "german"=>"blau"];
echo json_encode($blues);
echo json_encode($blues, JSON_UNESCAPED_UNICODE);

输出:

{"english":"blue","norwegian":"bl\u00e5","german":"blau"}
{"english":"blue","norwegian":"blå","german":"blau"}
json="[{"Type":"GreaterThanOrEqual","GroupName":"PHP 5.x","VersionName":"5.5"}]"> PHP 5.x 5.5

JSON_PARTIAL_OUTPUT_ON_ERROR

如果遇到一些无法编码的值,则允许继续编码。

$fp = fopen("foo.txt", "r");
$array = ["file"=>$fp, "name"=>"foo.txt"];
echo json_encode($array); // 没有输出
echo json_encode($array, JSON_PARTIAL_OUTPUT_ON_ERROR);

输出:

{"file":null,"name":"foo.txt"}
PHP 5.x 5.6

JSON_PRESERVE_ZERO_FRACTION

确保浮点数始终被编码为浮点数。

$array = [5.0, 5.5];
echo json_encode($array);
echo json_encode($array, JSON_PRESERVE_ZERO_FRACTION);

输出:

[5,5.5]
[5.0,5.5]
PHP 7.x 7.1版本

JSON_UNESCAPED_LINE_TERMINATORS

与一起使用时JSON_UNESCAPED_UNICODE,将恢复为较早的PHP版本的行为,并且不会转义字符U + 2028 LINE SEPARATOR和U + 2029 PARAGRAPH SEPARATOR。尽管这些字符在JSON中有效,但在JavaScript中无效,因此的默认行为JSON_UNESCAPED_UNICODE已在7.1版中更改。

$array = ["line"=>"\xe2\x80\xa8", "paragraph"=>"\xe2\x80\xa9"];
echo json_encode($array, JSON_UNESCAPED_UNICODE);
echo json_encode($array, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_LINE_TERMINATORS);

输出:

{"line":"\u2028","paragraph":"\u2029"}
{"line":"
","paragraph":"
"}
 类似资料:
  • 问题内容: 我有一些json,我需要解码,更改然后编码,而不会弄乱任何字符。 如果我在json字符串中包含unicode字符,它将无法解码。我不知道为什么,因为json.org说一个字符串可以包含:。但这在python中也不起作用。 我可以使用utf8_encode,该字符串将允许使用json_decode对字符串进行解码,但是字符会被压缩成其他形式。这是来自结果数组的print_r的结果。两个字

  • 问题内容: 大家好,我是从外部Api获取websocket信息的,它以这种方式给了我json响应: 我把它放在这个结构中 并用代码解码 我遇到错误 我知道该错误是文本字段值的结果。有什么好的方法可以清理它或告诉解码器忽略文本字段的内容吗? 问题答案: 该应用程序正在解析包含substring的数据。这是无效的JSON。错误消息抱怨in 。 由于JSON值包含编码的JSON值,因此应用程序必须分两个

  • 我有一个带有一些特殊字符的mysql数据库,一个输入表单,一些PHP页面。 > 这个页面发送(通过GET)一个参数到另一个php页面(ResultsPage)。 最后这个php页面(ResultsPage)向dbms发送一个带有参数的查询并显示结果。 RequestPage编码为utf-8至 meta http equiv=“Content Type”Content=“text/html;char

  • 问题内容: 我正在使用接受json响应的jquery ajax调用: 在我的php后端函数中,我在一个简单的数组上使用json_encode,如下所示: 但是 alert(msg.hello) 为我返回 未定义 。这是怎么了?另外,在我的 console.log中, 我能够得到如下输出: 问题答案: 使用的返回数据:

  • 问题内容: 我在使用PHP json_encode函数时遇到问题。它将数字编码为字符串,例如 变成 当js遇到这些值时,它将它们解释为字符串,并且对它们的数字运算失败。有谁知道某种防止将数字编码为字符串的方法?谢谢! 问题答案: 我做了一个非常快速的测试: 如果我没记错的话,这似乎就像你所描述的那样? 我得到的输出: 因此,在这种情况下,整数尚未转换为字符串。 不过,这可能取决于我们使用的PHP版

  • 问题内容: 我有一个看起来像这样的JSON字符串: 什么是解码此和地点PHP ,,,,和到会话变量? 到目前为止,我已经尝试过了,但是没有用: 谢谢! 问题答案: 是您了解JSON结构的朋友。 结果是: