Проверьте ключ на объекте JSON - PullRequest
0 голосов
/ 11 ноября 2018

Мы получаем строку JSON двумя способами:

"{"phoneNumber":[{"remove":["0099887769"]},{"add":["0099887765"]}]}"

Или

"{"phoneNumber":["0099887765"]}"

Мы должны конвертировать "{"phoneNumber":[{"remove":["0099887769"]},{"add":["0099887765"]}]}" в "{"phoneNumber":["0099887765"]}" способ

Есть ли способ написать JavaScript, чтобы определить, какой JSON имеет ключ добавления, а какой нет.

Ответы [ 6 ]

0 голосов
/ 11 ноября 2018

Вы можете сделать это, используя for..in loop и hasOwnProperty check, наконец, нажмите только phoneNumbers с индексом add. Надеюсь, это поможет:)

const expected = {'phoneNumber':[]};
let str = '{"phoneNumber":[{"add":["0099844465"],"remove":["0099887769"]},{"add":["0099887765"]}]}';

const st_obj = JSON.parse(str);
for (var k in st_obj['phoneNumber']) {
        if (st_obj['phoneNumber'][k].hasOwnProperty('add'))           {
           expected['phoneNumber'].push(st_obj['phoneNumber'][k]['add']);
        }
}

console.log(expected);
0 голосов
/ 11 ноября 2018

Вы можете использовать some для возврата true / false, если «add» является свойством любого объекта в массиве. Вот общее решение:

const json = '{"phoneNumber":[{"remove":["0099887769"]},{"add":["0099887765"]}]}';
const data = JSON.parse(json);

function checkForKey(data, { arrayKey, searchKey }) {
  return data[arrayKey].some(obj => obj[searchKey]);
}

const hasAdd = checkForKey(data, {arrayKey: 'phoneNumber', searchKey: 'add' });
console.log(hasAdd);
0 голосов
/ 11 ноября 2018

Когда вы анализируете JSON, у вас будет массив с двумя записями (каждый объект), если это первый стиль, или массив с одной записью, которая является строкой. Итак:

function handle(theJSON) {
    let parsed = JSON.parse(theJSON);
    if (typeof parsed.phoneNumber[0] === "object") {
        parsed.phoneNumber = [parsed.phoneNumber.find(o => o.add).add[0]];
    }
    console.log(parsed);
}

Live Пример:

function handle(theJSON) {
    let parsed = JSON.parse(theJSON);
    if (typeof parsed.phoneNumber[0] === "object") {
        parsed.phoneNumber = [parsed.phoneNumber.find(o => o.add).add[0]];
    }
    console.log(parsed);
}
    
handle('{"phoneNumber":[{"remove":["0099887769"]},{"add":["0099887765"]}]}');

handle('{"phoneNumber":["0099887765"]}');

Или, если вам нужна версия ES5:

function handle(theJSON) {
    var parsed = JSON.parse(theJSON);
    if (typeof parsed.phoneNumber[0] === "object") {
        parsed.phoneNumber = [parsed.phoneNumber.find(function(o) { return o.add; }).add[0]];
    }
    console.log(parsed);
}
0 голосов
/ 11 ноября 2018

используйте let obj = JSON.parse('{"phoneNumber":[{"remove":["0099887769"]},{"add":["0099887765"]}]}'), чтобы преобразовать его в объект. затем выполните итерацию и получите значение и вставьте его в новый объект

0 голосов
/ 11 ноября 2018

Вы можете проверить, существует ли ключ add, преобразовав JSON в массив:

Как преобразовать объект JSON в массив JavaScript

С этим вы можете проверить, существует ли ключ, проверив, является ли ключ неопределенным:

obj["phonenumber"]["add"] != undefined
0 голосов
/ 11 ноября 2018

просто проверьте, правильно ли добавлен верхний уровень

if(obj['add']) {....}

если он существует, то if будет истинным, если нет, то вернется undefined и if будет ложным,

если вам нужно проверить это в массиве объектов, вы можете использовать ту же логику с find методом из массива прототипа

phoneNumber.find(obj => obj['add']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...