[英]Extract values from json in javascript
我如何遍历json并从以下json字符串中提取每个任务的值(即“ AMS升级”和“ BMS作品”是任务),我尝试使用下面的代码,但未成功。
请注意,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);
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]}`); } }); });
这是使用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]}`) }) }
您可以获取值,并从值中获取总计。 由于在您的结构中总数仅位于第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)
如您所愿,这些项目为变量。 查找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);
这是您的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);
}
这样尝试
var obj = JSON.parse(data);
console.log("processing data...");
console.log(obj);
console.log(obj.line_items["AMS Upgrade"][0]);
line_itmes提交了“ AMS升级”,然后“ AMS升级”具有了array 。 因此,您必须通过数组进行访问。
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]);
使用您的原始结构,以下方法将起作用:
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
}
]}
在第一部分中,我只是解析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']);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.