Pra*_*ful 2 javascript json facebook utf-8 node.js
我已将 Facebook 数据下载为 json 文件。我的帖子的 json 文件包含表情符号,它们在 json 文件中显示如下:\\u00f0\\u009f\\u0098\\u008a。我想解析这个 json 文件并使用正确的表情符号提取帖子。
\n\n我找不到一种方法将此 json 文件加载到 json 对象中(使用 JavaScript),然后使用正确的表情符号读取(并输出)帖子。
\n\n(最终我将使用 WordPress 的 REST API 将这些帖子上传到 WordPress,我已经弄清楚了如何做。)
\n\n我的程序是用 JavaScript 编写的,并使用 nodejs 从命令行运行。我已经使用以下方法解析了该文件:
\n\nconst fs = require(\'fs\')\nlet filetext = fs.readFileSync(filename, \'utf8\')\nlet jsonObj = JSON.parse(filetext)\n
Run Code Online (Sandbox Code Playgroud)\n\n但是,当我输出数据(使用类似jsonObj.status_updates.data[0].post
)时,我得到了表情符号的奇怪字符,例如Happy birthday \xe2\x94\x9c\xe2\x96\x91\xe2\x94\xac\xc6\x92\xe2\x94\xac\xc3\xbf\xe2\x94\xac\xc3\xa8
而不是Happy birthday
。这不是 Windows 10 控制台显示问题,因为我也将输出通过管道传输到文件。
在解析文件之前,我已使用答案Decode or unescape \\u00f0\\u009f\\u0091\\u008d 来将 json 文件中的 \\uXXXX 序列更改为实际的表情符号。但是,然后JSON.parse
不起作用。它给出了这样的消息:
SyntaxError: Unexpected token o in JSON at position 1\n at JSON.parse (<anonymous>)\n
Run Code Online (Sandbox Code Playgroud)\n\n所以我陷入了困境:如果我在尝试解析 json 文件之前转换 \\uXXXX 序列,则 JavaScript json 解析器会出错。如果我不转换 \\uXXXX 序列,则 json 对象形式的解析文件不会提供正确的表情符号!
\n\n如何从 json 文件中正确提取数据(包括表情符号)?
\n我相信您应该能够在 Node.js 中完成所有这些工作,这是一个示例。我已经使用 Visual Studio Code 对此进行了测试。
您可以在这里尝试: https: //repl.it/repls/BrownAromaticGnudebugger
注意:我已经按照 @JakubASuplicki 非常有用的注释更新了 processMessage,仅查看字符串属性。
索引.js
const fs = require('fs')
let filename = "test.json";
let filetext = fs.readFileSync(filename, "utf8");
let jsonObj = JSON.parse(filetext);
console.log(jsonObj);
function decodeFBString(str) {
let arr = [];
for (var i = 0; i < str.length; i++) {
arr.push(str.charCodeAt(i));
}
return Buffer.from(arr).toString("utf8");
}
function processMessages (messageArray) {
return messageArray.map(processMessage);
}
function processMessage(message) {
return Object.keys(message).reduce((obj, key) => {
obj[key] = (typeof message[key] === "string") ? decodeFBString(message[key]): message[key];
return obj
}, {});
}
let messages = processMessages(jsonObj.messages);
console.log("Input: ", jsonObj.messages);
console.log("Output: ", messages);
Run Code Online (Sandbox Code Playgroud)
测试.json
{
"participants": [
{
"name": "Philip Marlowe"
},
{
"name": "Terry Lennox"
}
],
"messages": [
{
"sender_name": "Philip Marlowe",
"timestamp_ms": 1546857175,
"content": "Meet later? \u00F0\u009F\u0098\u008A",
"type": "Generic"
},
{
"sender_name": "Terry Lennox",
"timestamp_ms": 1546857177,
"content": "Excellent!! \u00f0\u009f\u0092\u009a",
"type": "Generic"
}
]
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2003 次 |
最近记录: |