【问题标题】:How do i get a property JSON with Regular Expression in Javascript?如何在 Javascript 中使用正则表达式获取属性 JSON?
【发布时间】:2020-11-24 15:29:48
【问题描述】:

大家好!

我的主要目标是获取nested objectobject properties 列表,使用方法for loop 对我来说太混乱了,使用Regex 非常简单,使用JSON.stringify() 和@987654326 @方法。

这是我的 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)

另外,我是正则表达式的初学者

【问题讨论】:

  • 那么,“布拉德”是谁?
  • 你也只需要键或值吗?或两者兼而有之
  • 仅对象键
  • 我使用你的正则表达式/"(.*?)":/得到了预期的输出
  • @xianshenglu in .match() 方法?

标签: javascript json regex string object


【解决方案1】:

使用递归迭代对象及其嵌套对象并构建一组唯一键。

您不应该使用正则表达式解析 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; }

【讨论】:

  • 我正在使用Regex 方法,因为它对于在该对象中添加新的嵌套对象也很有用
  • @Firmansyah 那么这是一个完全不同的问题。你仍然可以适应这个抓取功能。将其视为“树行走”功能。
【解决方案2】:

我得到了模式/"(\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() 开始 " 并结束 "

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多