Я искал ответ на этот конкретный формат, но не смог найти его, чтобы решить эту конкретную проблему.

Ситуация в том, что у меня есть своего рода формат JSON, с которым я не могу работать в сочетании с mongoDB. Я хочу изменить формат данных JSON на обычный объект JavaScript. Сейчас объем данных превышает 2000 записей, поэтому я не могу обрабатывать их вручную. И я не мог заставить JSON.parse (data) работать для такого специального формата.

Вот пример текущего формата JSON:

{
    "一": {
        "strokes": 1,
        "grade": 1,
        "freq": 2,
        "jlpt_old": 4,
        "jlpt_new": 5,
        "meanings": ["One","One Radical (no.1)"],
        "readings_on": ["いち","いつ"],
        "readings_kun": ["ひと-","ひと.つ"],
        "wk_level": 1,
        "wk_meanings": ["One"],
        "wk_readings_on": ["いち","いつ"],
        "wk_readings_kun": ["!ひと"],
        "wk_radicals": ["Ground"]
    },
    "二": {
        "strokes": 2,
        "grade": 1,
        "freq": 9,
        "jlpt_old": 4,
        "jlpt_new": 5,
        "meanings": ["Two","Two Radical (no. 7)"],
        "readings_on": ["に","じ"],
        "readings_kun": ["ふた","ふた.つ","ふたたび"],
        "wk_level": 1,
        "wk_meanings": ["Two"],
        "wk_readings_on": ["に"],
        "wk_readings_kun": ["!ふた"],
        "wk_radicals": ["Two"]
    },
}

И в конечном итоге я хочу достичь следующего формата:

[
    {
        kanji: "一",
        strokes: 1,
        grade: 1,
        freq: 2,
        jlpt_old: 4,
        jlpt_new: 5,
        meanings: ["One","One Radical (no.1)"],
        readings_on: ["いち","いつ"],
        readings_kun: ["ひと-","ひと.つ"],
        wk_level: 1,
        wk_meanings: ["One"],
        wk_readings_on: ["いち","いつ"],
        wk_readings_kun: ["!ひと"],
        wk_radicals: ["Ground"]
    },
    {
        kanji: "二",
        strokes: 2,
        grade: 1,
        freq: 9,
        jlpt_old: 4,
        jlpt_new: 5,
        meanings: ["Two","Two Radical (no. 7)"],
        readings_on: ["に","じ"],
        readings_kun: ["ふた","ふた.つ","ふたたび"],
        wk_level: 1,
        wk_meanings: ["Two"],
        wk_readings_on: ["に"],
        wk_readings_kun: ["!ふた"],
        wk_radicals: ["Two"]
    }
]

Как видите, в исходном формате есть ключ, описывающий каждый объект, но в желаемом формате вся информация находится внутри объекта.

Было бы здорово, если бы кто-нибудь мог мне помочь с этой проблемой! :)

0
ForestFox 22 Ноя 2020 в 14:44

3 ответа

Лучший ответ

Достаточно одного вызова map() для Object.entries() проанализированного JSON.

const json = '{"一":{"strokes":1,"grade":1,"freq":2,"jlpt_old":4,"jlpt_new":5,"meanings":["One","One Radical (no.1)"],"readings_on":["いち","いつ"],"readings_kun":["ひと-","ひと.つ"],"wk_level":1,"wk_meanings":["One"],"wk_readings_on":["いち","いつ"],"wk_readings_kun":["!ひと"],"wk_radicals":["Ground"]},"二":{"strokes":2,"grade":1,"freq":9,"jlpt_old":4,"jlpt_new":5,"meanings":["Two","Two Radical (no. 7)"],"readings_on":["に","じ"],"readings_kun":["ふた","ふた.つ","ふたたび"],"wk_level":1,"wk_meanings":["Two"],"wk_readings_on":["に"],"wk_readings_kun":["!ふた"],"wk_radicals":["Two"]}}';

const obj = JSON.parse(json);

const refactored = Object.entries(obj).map(([k, v]) => ({kanji: k, ...v}));

console.log(refactored);
0
pilchard 22 Ноя 2020 в 12:01

Оба являются действительными объектами JSON, хотя вам требуется простая манипуляция:

const data = {
    "一": {
        "strokes": 1,
        "grade": 1,
        "freq": 2,
        "jlpt_old": 4,
        "jlpt_new": 5,
        "meanings": ["One","One Radical (no.1)"],
        "readings_on": ["いち","いつ"],
        "readings_kun": ["ひと-","ひと.つ"],
        "wk_level": 1,
        "wk_meanings": ["One"],
        "wk_readings_on": ["いち","いつ"],
        "wk_readings_kun": ["!ひと"],
        "wk_radicals": ["Ground"]
    },
    "二": {
        "strokes": 2,
        "grade": 1,
        "freq": 9,
        "jlpt_old": 4,
        "jlpt_new": 5,
        "meanings": ["Two","Two Radical (no. 7)"],
        "readings_on": ["に","じ"],
        "readings_kun": ["ふた","ふた.つ","ふたたび"],
        "wk_level": 1,
        "wk_meanings": ["Two"],
        "wk_readings_on": ["に"],
        "wk_readings_kun": ["!ふた"],
        "wk_radicals": ["Two"]
    }
};

const parsed = Object.entries(data).reduce((acc, [kanji, obj]) => acc.concat({kanji, ...obj}), []);
console.log(parsed)
1
MorKadosh 22 Ноя 2020 в 11:50

Это хорошо для тебя?

let json = {
    "一": {
        "strokes": 1,
        "grade": 1,
        "freq": 2,
        "jlpt_old": 4,
        "jlpt_new": 5,
        "meanings": ["One","One Radical (no.1)"],
        "readings_on": ["いち","いつ"],
        "readings_kun": ["ひと-","ひと.つ"],
        "wk_level": 1,
        "wk_meanings": ["One"],
        "wk_readings_on": ["いち","いつ"],
        "wk_readings_kun": ["!ひと"],
        "wk_radicals": ["Ground"]
    },
    "二": {
        "strokes": 2,
        "grade": 1,
        "freq": 9,
        "jlpt_old": 4,
        "jlpt_new": 5,
        "meanings": ["Two","Two Radical (no. 7)"],
        "readings_on": ["に","じ"],
        "readings_kun": ["ふた","ふた.つ","ふたたび"],
        "wk_level": 1,
        "wk_meanings": ["Two"],
        "wk_readings_on": ["に"],
        "wk_readings_kun": ["!ふた"],
        "wk_radicals": ["Two"]
    },
}

let response = [];
for(let key in json){
   response.push({ kanji: key, ...json[key]});
}
console.log(response);
0
Ran Marciano 22 Ноя 2020 в 11:50
64953739