簡體   English   中英

從javascript中的json提取值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM