Javascript 将Facebook json文件序列(如\u00f0\u009f\u0098\u008a)转换为表情符号

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编写的

我已经下载了我的Facebook数据作为json文件。我的帖子的json文件包含emojis,它在json文件中显示如下:\u00f0\u009f\u0098\u008a。我想解析这个json文件,并用正确的表情提取帖子

我找不到一种方法将这个json文件加载到一个json对象中(使用JavaScript),然后用正确的emojis读取(并输出)帖子

(最终,我将使用WordPress的RESTAPI将这些帖子上传到WordPress,我已经找到了方法。)

我的程序是用JavaScript编写的,从命令行使用nodejs运行。我已使用以下方法解析了该文件:

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"
        }
    ]
}