鍍金池/ 問(wèn)答/Linux  HTML/ javascript通過(guò)拼接從json數(shù)據(jù)里獲取特定內(nèi)容

javascript通過(guò)拼接從json數(shù)據(jù)里獲取特定內(nèi)容

1.這是我的json字符串

{

"綜合指數(shù)分析":
    {    "預(yù)測(cè)分析":
        {    "預(yù)測(cè)模型":"1111111111111111",
            "預(yù)測(cè)值":"2222222",
            "預(yù)測(cè)指數(shù)圖":"33333"
        },
        "綜合系統(tǒng)預(yù)警圖":"44444444",
        "指標(biāo)權(quán)值":"5555",
        "趨勢(shì)圖":"0000000000",
        "隸屬度":"9999999",
        "指標(biāo)標(biāo)準(zhǔn)":"8888",
        "指標(biāo)預(yù)警圖":"7777777",
        子系統(tǒng)預(yù)警圖":"6666"
    }

}

2.我的需求
通過(guò)類似 jsonStr"綜合指數(shù)分析"["預(yù)測(cè)模型"] 獲取json字符串中的數(shù)字串,由于我想動(dòng)態(tài)獲取jsonStr中的內(nèi)容,比如需要"趨勢(shì)圖"的“0000000000”時(shí)就拼接出
jsonStr["綜合指數(shù)分析"]["趨勢(shì)圖"].

3.我的代碼

function getMenuContent(jsonStr){
    $(".folder").each(function(){
        $(this).click(function(){
            var arr=new Array();//保存父級(jí)元素文本內(nèi)容
            var txt=$(this).text();//點(diǎn)擊元素文本內(nèi)容
            var rbleft=$("#right-bottom-left");            
            var parentEls=$("span:contains("+txt+")").parents().filter("li").map(function(){
                if(this.tagName=="LI"){//this.tagName=="UL"||"LI"
                    var obj=$(this).children("span").first().clone();
                    console.log(obj.html());//輸出父級(jí)元素的文本內(nèi)容
                    arr.push(obj.html());
                    return this.tagName;
                }
            })
            var content=getJsonStr(arr);
            console.log("jsonStr"+content+"");
            rbleft.text(jsonStr+""+content+"");// 如何通過(guò)拼接實(shí)現(xiàn)動(dòng)態(tài)獲取jsonStr的內(nèi)容?????
            return arr;
        })
    })
}


//拼接獲取json字符串的表達(dá)式,像jsonStr["綜合指數(shù)分析"]["預(yù)測(cè)分析"] 
function getJsonStr(arr){
    var str="";//存儲(chǔ)獲取json字符串的表達(dá)式
    for(var i=0;i<arr.length;i++){
        str+='["'+arr[i]+'"]';
    }
    return str;
}


4.如同3中有一行注釋有5個(gè)問(wèn)號(hào),請(qǐng)問(wèn)如何解決這個(gè)需求?
我需要做成比遞歸遍歷更加靈活的操作,就是比如需要哪個(gè)數(shù)據(jù)直接就是哪個(gè)數(shù)據(jù)。
我是把json數(shù)據(jù)做成了菜單,點(diǎn)擊菜單就直接獲取那個(gè)菜單的數(shù)據(jù)。比如點(diǎn)擊"預(yù)測(cè)值",
然后就從json數(shù)據(jù)里拿到"預(yù)測(cè)值"的"2222222"。我一直認(rèn)為要從json里拿到
"預(yù)測(cè)值"的"2222222",需要先知道"預(yù)測(cè)值"的父級(jí)"預(yù)測(cè)分析"和"綜合指數(shù)分析",
然后通過(guò)jsonStr["綜合指數(shù)分析"]["預(yù)測(cè)分析"]["預(yù)測(cè)值"]獲取到數(shù)據(jù)"2222222"。
請(qǐng)問(wèn)這個(gè)思路對(duì)嗎?有更好的思路嗎?
回答
編輯回答
影魅

你這太復(fù)雜了,如果是個(gè)合法的json字符串,那么直接用JSON.parse(str)轉(zhuǎn)成一個(gè)對(duì)象,然后用obj"綜合指數(shù)分析"

2018年5月16日 15:46
編輯回答
赱丅呿

簡(jiǎn)單點(diǎn)就用eval

var arr = { "name": "zhangsan" }
var str = "arr['name']"

console.log(eval(str))

function _eval(str) {
    return new Function("return " + str)()
}
console.log(_eval(str))
2017年7月3日 00:27
編輯回答
遺莣
  function getJsonStr(jsonStr,arr) {
                    for (var i = 0; i < arr.length; i++) {
                        jsonStr =jsonStr[arr[i]];
                    }
                    return jsonStr;
                }

str+='["'+arr[i]+'"]';這樣子是獲取不到數(shù)據(jù)的

2018年6月28日 05:14