Javascript 将Facebook json文件序列(如\u00f0\u009f\u0098\u008a)转换为表情符号
我已经下载了我的Facebook数据作为json文件。我的帖子的json文件包含emojis,它在json文件中显示如下:\u00f0\u009f\u0098\u008a。我想解析这个json文件,并用正确的表情提取帖子 我找不到一种方法将这个json文件加载到一个json对象中(使用JavaScript),然后用正确的emojis读取(并输出)帖子 (最终,我将使用WordPress的RESTAPI将这些帖子上传到WordPress,我已经找到了方法。) 我的程序是用JavaScript编写的,从命令行使用nodejs运行。我已使用以下方法解析了该文件:Javascript 将Facebook json文件序列(如\u00f0\u009f\u0098\u008a)转换为表情符号,javascript,node.js,json,facebook,utf-8,Javascript,Node.js,Json,Facebook,Utf 8,我已经下载了我的Facebook数据作为json文件。我的帖子的json文件包含emojis,它在json文件中显示如下:\u00f0\u009f\u0098\u008a。我想解析这个json文件,并用正确的表情提取帖子 我找不到一种方法将这个json文件加载到一个json对象中(使用JavaScript),然后用正确的emojis读取(并输出)帖子 (最终,我将使用WordPress的RESTAPI将这些帖子上传到WordPress,我已经找到了方法。) 我的程序是用JavaScript编写的
const fs = require('fs')
let filetext = fs.readFileSync(filename, 'utf8')
let jsonObj = JSON.parse(filetext)
但是,当我输出数据时(使用类似于
jsonObj.status\u updates.data[0].post的东西),我得到了表情符号的奇怪字符,比如生日快乐├░┬ƒ┬ÿ┬è
而不是生日快乐我相信您应该能够在Node.js中完成所有这些,下面是一个示例。
我已经使用VisualStudio代码对此进行了测试
您可以在这里尝试:
注意:我已经根据@JakubASuplicki的非常有用的注释更新了ProcessMessage,只查看字符串属性
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] = (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);
好东西。谢谢你。需要注意的一点是,这种方法还删除了timestamp\u ms
值。在将messages
传递到processMessages()
之前,我通过将毫秒转换为所需的数据格式来解决这个问题。非常感谢@JakubASuplicki提供的信息,我想我们对所有数字属性都是这样做的。因此,我将添加一个测试,以确保我们只转换字符串属性。这将是惊人的。我希望看到一个更新的代码,然后。谢谢所以我更新了代码,现在我们检查每个属性的类型,如果它是我们转换的字符串,如果不是,我们保持原样。看起来不错!非常感谢。我最近也在研究它,我还注意到在Facebook JSON文件中,GIF或图片等内容——任何带有外部链接的内容都在数组中。这会在将内容传递到decodeFBString(str)
时导致错误,因为它需要字符串。我通过在方法中添加一行来修复它,该行检查str
是否是数组
-数组。isArray(str)
,如果不是,则arr.push(str.charCodeAt(I))
将正常运行,否则将抛出错误。我以为有人在处理现实生活中导出的FB 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"
}
]
}