从javascript中的json提取值

时间:2019-02-12 05:26:36

标签: javascript json

我该如何遍历json并从以下json字符串中提取每个任务的值(即“ AMS Upgrade”和“ BMS works”是任务),我尝试使用下面的代码,但未成功。

请注意,AMS升级和BMS的工作原理是变量 ,因此代码不应引用它们

在每个循环中,我希望能够控制台以下日志

第一个循环

任务说明:AMS升级

总计:30667.303111791967

完成百分比:1.0

索赔值:25799.788761888347

第二个循环

任务说明:BMS有效

总计:35722.8761704046

%完成至结束:0.1

索赔值:3572.2876170404597

var data = `{"line_items": {"AMS Upgrade": [{"Total": 30667.303111791967}, {"% Complete to end": 1.0}, {"value claimed": 25799.788761888347}], "BMS works": [{"Total": 35722.8761704046}, {"% Complete to end": 0.1}, {"value claimed": 3572.2876170404597}]}}`


    var obj = JSON.parse(data);					
    console.log("processing data...");
    console.log(obj); 
    console.log(obj.line_items[1].Total);

 

9 个答案:

答案 0 :(得分:2)

const obj = {
	"line_items": {
		"AMS Upgrade": [{
			"Total": 30667.303111791967
		}, {
			"% Complete to end": 1.0
		}, {
			"value claimed": 25799.788761888347
		}],
		"BMS works": [{
			"Total": 35722.8761704046
		}, {
			"% Complete to end": 0.1
		}, {
			"value claimed": 3572.2876170404597
		}]
	}
};
  
const totals = Object.keys(obj.line_items).map(valInner => obj.line_items[valInner][0].Total);
console.log(totals);
  
/* Updated code for inner values */
Object.keys(obj.line_items).forEach(valInner => {
  obj.line_items[valInner].forEach((val) => {
    for (const i in val) {
    	console.log(`${i} = ${val[i]}`);
    }
  });
});

答案 1 :(得分:2)

这是使用for..in的方式。

const data = {"line_items": 
	{"AMS Upgrade": [
		{"Total": 30667.303111791967},
		{"%Complete to end": 1.0},
		{"value claimed": 25799.788761888347}],
	"BMSworks":	[
		{"Total": 35722.8761704046},
		{"%Complete to end": 0.1},
		{"value claimed": 3572.2876170404597}]
	}
}
let totals = [];
for(let key in data.line_items){
	totals.push(data.line_items[key][0].Total);
}
console.log(totals)
//Combining all other like Total
for(let key in data.line_items){
  console.log("Task Description:" + key);
  data.line_items[key].forEach(value => {
    let k = console.log(`${Object.keys(value)}:${Object.values(value)[0]}`)
  }) 
}

答案 2 :(得分:1)

您可以获取值并从值中获取总计。由于在您的结构中总数仅位于第0个索引,因此如果顺序不固定(可以使用find),则可以直接访问第0个索引。

let obj = {"line_items": {"AMS Upgrade": [{"Total": 30667.303111791967}, {"% Complete to end": 1.0}, {"value claimed": 25799.788761888347}], "BMS works": [{"Total": 35722.8761704046}, {"% Complete to end": 0.1}, {"value claimed": 3572.2876170404597}]}}
let Total = Object.values(obj.line_items).map(e=>e[0].Total)

console.log(Total)

  

我如何遍历json并在每次运行时获取所有这些值   名称,总数,%_ complete_to_end:和value_claimed一起

let obj = {"line_items": {"AMS Upgrade": [{"Total": 30667.303111791967}, {"% Complete to end": 1.0}, {"value claimed": 25799.788761888347}], "BMS works": [{"Total": 35722.8761704046}, {"% Complete to end": 0.1}, {"value claimed": 3572.2876170404597}]}}

let Total = Object.values(obj.line_items).map(e=> e.map(el=> Object.values(el)))

console.log(Total)

答案 3 :(得分:1)

因为您希望这些项目为变量。寻找theKeyWeWantToget变量。

    var data = `{"line_items": {"AMS Upgrade": [{"Total": 30667.303111791967}, {"% Complete to end": 1.0}, {"value claimed": 25799.788761888347}], "BMS works": [{"Total": 35722.8761704046}, {"% Complete to end": 0.1}, {"value claimed": 3572.2876170404597}]}}`

    var obj = JSON.parse(data);					
    console.log("processing data...");
    console.log(obj); 
    var theKeyWeWantToget = "AMS Upgrade";
    console.log(obj.line_items[theKeyWeWantToget][0].Total);
    theKeyWeWantToget = "BMS works";
    console.log(obj.line_items[theKeyWeWantToget][0].Total);

答案 4 :(得分:0)

这是您的JSON字符串/对象

{
    "line_items": {
        "AMS Upgrade": [{
            "Total": 30667.303111791967
        }, {
            "% Complete to end": 1.0
        }, {
            "value claimed": 25799.788761888347
        }],
        "BMS works": [{
            "Total": 35722.8761704046
        }, {
            "% Complete to end": 0.1
        }, {
            "value claimed": 3572.2876170404597
        }]
    }
}

访问总数应为

var totals=[]; //array to store totals.
for(var key in obj.line_items)
{
   totals.push(obj.line_items[key][0].Total);
}

答案 5 :(得分:0)

像这样尝试

var obj = JSON.parse(data);                 
console.log("processing data...");
console.log(obj); 
console.log(obj.line_items["AMS Upgrade"][0]);

line_itmes提交了“ AMS升级”,然后“ AMS升级”了数组。因此,您必须通过数组进行访问。

答案 6 :(得分:0)

ES6变体:无论您的总指数处于什么水平,都可以使用。

// ES6 variant.


const test = {
	"line_items": {
		"AMS Upgrade": [{
			"Total": 30667.303111791967
		}, {
			"% Complete to end": 1.0
		}, {
			"value claimed": 25799.788761888347
		}],
		"BMS works": [{
			"Total": 35722.8761704046
		}, {
			"% Complete to end": 0.1
		}, {
			"value claimed": 3572.2876170404597
		}]
	}
};

console.log(test["line_items"]["AMS Upgrade"].map(key => key['Total']).filter(val => !!val)[0]);
console.log(test["line_items"]["BMS works"].map(key => key['Total']).filter(val => !!val)[0]);

答案 7 :(得分:0)

使用您的原始结构,以下方法将起作用:

Object.keys(obj.line_items).forEach(key => console.log(obj.line_items[key][0].Total))

您可以改进JSON的结构,使其使用起来更容易。如果您对源数据有控制权,我将建议采取以下措施:

const data = { line_items: [
    { 
       name: "AMS Upgrade"
       total: 30667.303111791967,
       %_complete_to_end: 1.0,
       value_claimed: 25799.788761888347
    },
    {
        name: "BMSworks",
        total: 35722.8761704046,
        %_complete_to_end: 0.1,
        value_claimed: 3572.2876170404597
    }
]}

答案 8 :(得分:0)

在第一部分中,我只是解析JSON数据, 在将每个数组存储在变量中(没有必要)之后,在第三部分中,我对数组的每个元素进行了console.log

/**
*Part 1
*/
var data = JSON.parse(`{"line_items": {"AMS Upgrade": [{"Total": 30667.303111791967}, {"% Complete to end": 1.0}, {"value claimed": 25799.788761888347}], "BMS works": [{"Total": 35722.8761704046}, {"% Complete to end": 0.1}, {"value claimed": 3572.2876170404597}]}}`);
/**
*Part 2
*/

var amsUpgrade = data['line_items']['AMS Upgrade'];
console.log('AMS Upgrade : ', amsUpgrade);
/**
*Part 3
*/
console.log('AMS Upgrade Total : ', amsUpgrade[0]['Total']);
console.log('AMS Upgrade % Complete to end : ', amsUpgrade[1]['% Complete to end']);
console.log('AMS Upgrade value claimed', amsUpgrade[2]['value claimed']);

var bmsWorks = data['line_items']['BMS works'];
console.log('BMS works : ', bmsWorks);
console.log('BMS works Total : ', bmsWorks[0]['Total']);
console.log('BMS works % Complete to end : ', bmsWorks[1]['% Complete to end']);
console.log('BMS works value claimed', bmsWorks[2]['value claimed']);