Как получить свойство JSON с регулярным выражением в Javascript? - PullRequest
0 голосов
/ 04 августа 2020

Всем привет!

Моя основная цель - получить список object properties из nested object, использование метода for loop слишком запутано для меня, и это очень простой в использовании Regex с помощью методов JSON.stringify() и String.prototype.match().

Это мой JSON

{
    "date": 153039023841,
    "name": "VEmpink",
    "item": {
        "brand": "Apple",
        "product": "iPhone SE 2016",
        "color": "Rose Gold"
    },
    "status": {
        "type": "process",
        "dateStatus": 153092315152
    },
    "dp": 0,
    "price": 700,
    "notes": null
}

Ожидаемые результаты

[
    "date",
    "name",
    "item",
    "brand",
    "product",
    "color",
    "status",
    "type",
    "dateStatus",
    "dp",
    "price",
    "notes"
]

Мои результаты с шаблоном /"(.*?)":/g

var myObj = {
    date: 153039023841,
    name: "VEmpink",
    item: {
        brand: "Apple",
        product: "iPhone SE 2016",
        color: "Rose Gold"
    },
    status: {
        type: "process",
        dateStatus: 153092315152
    },
    dp: 0,
    price: 700,
    notes: null
};

var getKeys = JSON.stringify(myObj).match(/"(.*?)":/g);
console.log(getKeys)

, а также, я новичок в регулярном выражении

Ответы [ 2 ]

3 голосов
/ 04 августа 2020

Используйте рекурсию для перебора объекта и его вложенных объектов и создания набора уникальных ключей.

Вы не должны анализировать JSON с помощью регулярного выражения.

const data = {
  "date": 153039023841,
  "name": "VEmpink",
  "item": {
    "brand": "Apple",
    "product": "iPhone SE 2016",
    "color": "Rose Gold"
  },
  "status": {
    "type": "process",
    "dateStatus": 153092315152
  },
  "dp": 0,
  "price": 700,
  "notes": null
};

const isObj = o => o?.constructor === Object;

const grabKeys = (obj, keys=new Set()) => {
  if (isObj(obj)) {
    for (let key in obj) {
      keys.add(key);
      grabKeys(obj[key], keys);
    }
  }
  return keys;
};

console.log([...grabKeys(data)]);
.as-console-wrapper { top: 0; max-height: 100% !important; }
0 голосов
/ 06 августа 2020

Получил ожидаемый результат с шаблоном /"(\w+)":/gi

var myObj = {
    date: 153039023841,
    name: "VEmpink",
    item: {
        brand: "Apple",
        product: "iPhone SE 2016",
        color: "Rose Gold"
    },
    status: {
        type: "process",
        dateStatus: 153092315152
    },
    dp: 0,
    price: 700,
    notes: null
};

var getKeys = JSON.stringify(myObj).match(/"(\w+)":/gi);
console.log(getKeys);

Моя проблема с шаблоном /"(.*?)":/g потому что JSON.stringify() начало " и конец "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...