Конвертируйте последовательности json-файлов Facebook, такие как \ u00f0 \ u009f \ u008 \ u008a, в символы эмодзи - PullRequest
0 голосов
/ 07 января 2019

Я загрузил свои данные Facebook в виде файлов json. Файлы json для моих сообщений содержат смайлики, которые выглядят примерно так в файле json: \ u00f0 \ u009f \ u0098a. Я хочу проанализировать этот файл JSON и извлечь сообщения с правильными Emojis.

Я не могу найти способ загрузить этот файл json в объект json (используя JavaScript), а затем прочитать (и вывести) сообщение с правильными смайликами.

(Со временем я буду загружать эти сообщения в WordPress, используя его REST API, который я разработал, как это сделать.)

Моя программа написана на 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, поскольку я также передал вывод в файл.

Я использовал ответ Декодировать или unescape \ u00f0 \ u009f \ u0091 \ u008d в , чтобы изменить последовательности \ uXXXX в файле json на настоящие эмоджи перед анализом файла. Однако тогда JSON.parse не работает. Это дает это сообщение:

SyntaxError: Unexpected token o in JSON at position 1
    at JSON.parse (<anonymous>)

Так что я в затруднении: если я преобразую последовательности \ uXXXX перед тем, как попытаться проанализировать файл json, в парсере JavaScript json возникнет ошибка. Если я не преобразую последовательности \ uXXXX, то проанализированный файл в форме объекта json не даст правильных смайликов!

Как правильно извлечь данные, включая эмодзи, из файла json?

1 Ответ

0 голосов
/ 07 января 2019

Я полагаю, что вы сможете сделать все это в 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"
        }
    ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...