使用Node JS从嵌套JSON提取数据

时间:2019-04-04 06:14:54

标签: node.js json aws-lambda

我需要从订单中提取productid的文本值,但不幸的是我无法遍历JSON。关于如何以最简单的方式遍历Node JS中的节点的任何想法吗?

"order": {
    "PRD_SHIRT_048": {
      "price": "40.99",
      "productId": "PRD_SHIRT_048",
      "quantity": "1"
    },
 "PRD_TOP_047": {
      "price": "40.99",
      "productId": "PRD_TOP_047",
      "quantity": "1"
    }
  }

2 个答案:

答案 0 :(得分:1)

首先,您需要确定要从中提取数据的位置。 如果来自文件,则需要使用npm软件包“ fs”导入文件。

示例代码:

const fs = require("fs");
const content = fs.readFileSync("content.json");

console.log("Output: \n" + content);

您可以使用axios从特定的URL获取json数据。例如:

axios.get('yoururl')
  .then((response) => {
    // handle success
    console.log(response);
  })
  .catch((error) => {
    // handle error
    console.log(error);
  });

然后,您已成功提取数据。 之后,您可以使用JSON.parse解析json内容,这将返回一个包含所有内容的对象。

例如您的代码:

const json = `{"order": {
    "PRD_SHIRT_048": {
      "price": "40.99",
      "productId": "PRD_SHIRT_048",
      "quantity": "1"
    },
 "PRD_TOP_047": {
      "price": "40.99",
      "productId": "PRD_TOP_047",
      "quantity": "1"
    }
  }}`;
  
const obj = JSON.parse(json);

console.log(obj.order.PRD_SHIRT_048.productId);

如果需要,您可以遍历订单对象中的对象并从中获取产品ID。

答案 1 :(得分:0)

如果我正确理解您的问题,您是想提取 productIds 吗?

这是一个使用 vanilla javascript 的解决方案

const data = { order: { PRD_SHIRT_048: { price: '40.99', productId: 'PRD_SHIRT_048', quantity: '1' }, PRD_TOP_047: { price: '40.99', productId: 'PRD_TOP_047', quantity: '1' } } };

console.log(Object.keys(data.order));
// => [ 'PRD_SHIRT_048', 'PRD_TOP_047' ]
console.log(Object.values(data.order).map(({ productId }) => productId));
// => [ 'PRD_SHIRT_048', 'PRD_TOP_047' ]
.as-console-wrapper {max-height: 100% !important; top: 0}

或者如果您需要更灵活的解决方案(即 productId 的多个不同路径、嵌套的 productIds 等),您可以考虑使用库

// const objectScan = require('object-scan');

const data = { order: { PRD_SHIRT_048: { price: '40.99', productId: 'PRD_SHIRT_048', quantity: '1' }, PRD_TOP_047: { price: '40.99', productId: 'PRD_TOP_047', quantity: '1' } } };

console.log(objectScan(['order.*.productId'], { rtn: 'value' })(data));
// => [ 'PRD_TOP_047', 'PRD_SHIRT_048' ]
console.log(objectScan(['order.*'], { rtn: 'property' })(data));
// => [ 'PRD_TOP_047', 'PRD_SHIRT_048' ]
.as-console-wrapper {max-height: 100% !important; top: 0}
<script src="https://bundle.run/object-scan@13.8.0"></script>

免责声明:我是object-scan

的作者