我已将我的Facebook数据下载为json文件。我的帖子的json文件包含表情符号,它们在json文件中显示如下:\ u00f0 \ u009f \ u0098 \ u008a。我想解析此json文件,并使用正确的表情符号提取帖子。
我找不到一种方法(使用JavaScript)将该json文件加载到json对象中,然后使用正确的表情符号读取(并输出)该帖子。
(最终,我将使用其REST API将这些帖子上传到WordPress,我已经确定了该操作。)
我的程序是用JavaScript编写的,并在命令行中使用nodejs运行。我使用以下命令解析了文件:
const fs = require('fs')
let filetext = fs.readFileSync(filename, 'utf8')
let jsonObj = JSON.parse(filetext)
但是,当我输出数据时(使用类似jsonObj.status_updates.data[0].post
的东西,我得到了表情符号的奇怪字符,例如Happy birthday ├░┬ƒ┬ÿ┬è
而不是Happy birthday
。这不是Windows 10控制台显示问题,因为我也已将输出通过管道传输到文件。
在解析文件之前,我已经使用答案Decode or unescape \u00f0\u009f\u0091\u008d to ?将json文件中的\ uXXXX序列更改为实际的表情符号。但是,JSON.parse
无效。它给出以下消息:
SyntaxError: Unexpected token o in JSON at position 1
at JSON.parse (<anonymous>)
所以我处于绑定状态:如果在尝试解析json文件之前转换\ uXXXX序列,则JavaScript json解析器有错误。如果我不转换\ uXXXX序列,那么以json对象形式存在的已解析文件将无法提供正确的表情符号!
如何从json文件中正确提取数据,包括表情符号?
答案 0 :(得分:0)
我相信您应该能够在Node.js中完成所有这一切,这是一个示例。 我已经使用Visual Studio代码对此进行了测试。
您可以在这里尝试:https://repl.it/repls/BrownAromaticGnudebugger
index.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] = decodeFBString(message[key]);
return obj
}, {});
}
let messages = processMessages(jsonObj.messages);
console.log("Input: ", jsonObj.messages);
console.log("Output: ", messages);
test.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"
}
]
}