php - php - 将中文文本解析为 json
问题描述
txt 我看起来像:
紐約建築藝術 陳偉銘 藝術 2016/02/15 在館內
人體百科全書 蘇煥文 科學 2017/09/30 已借出
塞納河畔 葉國威 文學 2017/09/25 已預約
性別與教育 陳文輝 社會學 2016/10/12 已借出
台灣當代社會變革 林東興 社會學 2014/04/17 已借出
我想输出一个 json 数组文件,如下所示:
{
"books":[
{"title":" 紐 約 建 築 藝 術 ", "author":" 陳 偉 銘 ", "type":" 藝 術 ",
"publishDate":"2016/02/15", "status":"在館內"},
{"title":" 人 體 百 科 全 書 ", "author":" 蘇 煥 文 ", "type":" 科 學 ",
"publishDate":"2017/09/30", "status":"已借出"},
{"title":" 塞納河畔 ", "author":" 葉國威 ", "type":" 文 學 ",
"publishDate":"2017/09/25", "status":"已預約"},
{"title":" ... ", "author":" ... ", "type":" ... ",
"publishDate":"...", "status":"..."}
]}
这是我的代码:
<?php
// Open the file to read data.
$fh = fopen('Book.txt', 'r');
// define an eampty array
$data = array();
// read data
while ($line = fgets($fh)) {
if (trim($line) != '') {
$line_data = explode(' ', $line);
$data[] = array('title' => trim($line_data[0]), 'author' => trim($line_data[1]), 'type' => trim($line_data[2]), 'publishDate' => trim($line_data[3]), 'status' => trim($line_data[4]));
}
}
fclose($fh);
echo $json_data = json_encode($data);
?>
然后它输出(不确定如何将unicode转回中文)
[{"title":"\ufeff\u7d10\u7d04\u5efa\u7bc9\u85dd\u8853","author":"\u9673\u5049\u9298","type":"\u85dd\u8853","publishDate":"2016\/02\/15","status":"\u5728\u9928\u5167"},{"title":"\u6a5f\u5668\u5b78\u7fd2-\u4f7f\u7528Python\u8a9e\u8a00","author":"\u5f35\u82b3\u6797","type":"\u5de5\u7a0b","publishDate":"2018\/03\/29","status":"\u5728\u9928\u5167"},{"title":"\u53f0\u7063\u7576\u4ee3\u793e\u6703\u8b8a\u9769","author":"\u6797\u6771\u8208","type":"\u793e\u6703\u5b78","publishDate":"2014\/04\/17","status":"\u5df2\u501f\u51fa"}]
解决方案
json_encode
默认转义unicode,中文就是这样。添加JSON_UNESCAPED_UNICODE
到您json_encode
的输出未转义的 unicode。
json_encode($data, JSON_UNESCAPED_UNICODE);
为了漂亮地打印多行,您可以将其与JSON_PRETTY_PRINT
.
json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
推荐阅读
- amazon-web-services - AWS:通过负载均衡器或服务中任务中指定的公共 IP 访问应用程序
- java - 无法在 Android 10 中从意图打开文件
- memory-management - “__GFP_NOFAIL”和“__GFP_REPEAT”有什么区别?
- angular - 我应该如何在 asp .net core API 中返回错误
- java - 找不到符号、JUnit、枚举方法
- reactjs - 按其值着色 office-ui-fabric-react DetailsList Cell
- python - ImportError:无法从“tensorflow.python.framework”导入名称“device_spec”
- python - 查找列(称为文本)中是否包含单词
- javascript - FlatList:ListRenderItemInfo<> 的属性是什么?
- java - Java - 查找类(或类目录)的 jar 文件