首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >基于Javascript中的列表从Json中提取字段

基于Javascript中的列表从Json中提取字段
EN

Stack Overflow用户
提问于 2019-07-10 02:58:33
回答 2查看 550关注 0票数 0

我正在尝试从Json响应中提取一些字段,并将它们推入Javascript数组。我希望字段的选择是可配置的。下面是我正在做的事情:

将其视为我的JSON字符串:

代码语言:javascript
复制
{
    "id" : "1234",
    "orderNumber" : "1196",
    "createdOn" : "2019-07-02T12:03:39.697Z",
    "modifiedOn" : "2019-07-02T12:25:52.126Z",
    "testmode" : false,
    "customerEmail" : "a@b.com",
    "billingAddress" : {
      "firstName" : "John",
      "lastName" : "Doe",
      "address1" : "Wall Street",
      "address2" : null,
      "city" : "NYC",
      "state" : "NY",
      "countryCode" : "US",
      "postalCode" : "12345",
      "phone" : "1122334455"
    }
}

假设我想提取一些字段(在fields变量中定义)并将它们放入一个数组中。

代码语言:javascript
复制
# NOTE: the variable `data` here is my json object 

var FIELDS = ['id', 'orderNumber', 'customerEmail', 'billingAddress.firstName', 'billingAddress.lastName']

var lineItem = []

# parse the data (my Json object)
for (var i = 0; i < FIELDS.length; i++){
  lineItem.push(data[FIELDS[i]])
}

因此,这对于第一层( id,orderNumber和customerEmail)似乎工作正常,但对于billingAddress.firstname等不是这样。这就是我想知道的。

我的目的是能够修改字段变量中的定义,而不需要对代码中的逻辑进行任何更改。

希望这是有意义的。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2019-07-10 03:05:54

只要键名中没有句点,它就可以工作。

代码语言:javascript
复制
var data = {
    "id" : "1234",
    "orderNumber" : "1196",
    "createdOn" : "2019-07-02T12:03:39.697Z",
    "modifiedOn" : "2019-07-02T12:25:52.126Z",
    "testmode" : false,
    "customerEmail" : "a@b.com",
    "billingAddress" : {
      "firstName" : "John",
      "lastName" : "Doe",
      "address1" : "Wall Street",
      "address2" : null,
      "city" : "NYC",
      "state" : "NY",
      "countryCode" : "US",
      "postalCode" : "12345",
      "phone" : "1122334455"
    }
};

var FIELDS = ['id', 'orderNumber', 'customerEmail', 'billingAddress.firstName', 'billingAddress.lastName'];

var lineItem = [];
for (var i = 0; i < FIELDS.length; i++){
  let obj = data;
  let parts = FIELDS[i].split(".");
  while(parts.length) obj = obj[parts.shift()];
  lineItem.push(obj)
}

console.log(lineItem);

票数 1
EN

Stack Overflow用户

发布于 2019-07-10 03:06:21

您只需要一个函数,它将在.上拆分该路径并遍历JSON数据。这样你就可以在你的字段上使用map()了。

代码语言:javascript
复制
let data = {"id" : "1234","orderNumber" : "1196","createdOn" : "2019-07-02T12:03:39.697Z","modifiedOn" : "2019-07-02T12:25:52.126Z","testmode" : false,"customerEmail" : "a@b.com","billingAddress" : {"firstName" : "John","lastName" : "Doe","address1" : "Wall Street","address2" : null,"city" : "NYC","state" : "NY","countryCode" : "US","postalCode" : "12345","phone" : "1122334455"}}
var FIELDS = ['id', 'orderNumber', 'customerEmail', 'billingAddress.firstName', 'billingAddress.lastName']

// split an traverse
const getFromPath = (path, data) => path.split('.')
      .reduce((curr, p) => curr && curr[p], data) // check for curr incase path is undefined
      
console.log(FIELDS.map(p => getFromPath(p, data)))

如果在对象中找不到遍历的任何部分,则函数getFromPath将返回undefined

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56959076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档