codeMirror中JSON 數據,定位某個屬性在第幾行,

json內容賦值到codeMirror編輯器中使用

第一種方法

var jsonObj = { "OrdererOrgs": [ { "Name": "orderer", "Domain": "example1.com", "Specs": [ { "Hostname": "orderer" } ] } ], "PeerOrgs": [ { "Name": "org1", "Domain": "org1.example1.com", "Specs": [ { "Hostname": "peer0" } ], "Users": { "Count": 1 } }, { "Name": "org2", "Domain": "org2.example2.com", "Specs": [ { "Hostname": "peer3" } ], "Users": { "Count": 1 } } ] }

editor.setValue(JSON.stringify(jsonObj, null, 4))

JSON.stringify()能讓json對象,格式化內容,將數據分成一行行

根據codeMirror.lineInfo(i).text 來循環出行內容對應行數

var prop = "OrdererOrgs[0]|Domain"  // 需要查找的屬性名格式

var lineTotal1 = jsonEditor1.lineCount(),
     arrObject1 = {}; 
     for(var i=0;i<lineTotal1;i++){          // 將每行數據對應行數
         arrObject1[i] = jsonEditor1.lineInfo(i).text
     }
var jsonString = JSON.stringify(arrObject1).replace(/\s+/g,"|")  // 轉爲好查詢的字符串
searchJsonPropertyLine(prop,jsonString)

根據codeMirror.getValue()  來循環出行內容對應行數

//var jsonData ={"OrdererOrgs":[{"Name":"orderer","Domain":"example1.com","Specs":[{"Hostname":"orderer"}]}],"PeerOrgs":[{"Name":"org1","Domain":"org1.example1.com","Specs":[{"Hostname":"peer0"}],"Users":{"Count":1}},{"Name":"org2","Domain":"org2.example2.com","Specs":[{"Hostname":"peer3"}],"Users":{"Count":1}}]}
//$("#content").val(JSON.stringify(jsonData,null,4))
// 註銷的內容,是無需codeMirror編輯器,只需textarea元素
var prop2 = "OrdererOrgs[0]|Name";
//var getJsonData2 = $("#content").val();
var getJsonData2 = jsonEditor1.getValue();
console.log(JSON.stringify(getJsonData2))

var jsonObjTest = JSON.stringify(getJsonData2).slice(1,JSON.stringify(getJsonData2).length-1).replace(/\\n/g,"|").split("|"),
	jsonObjTestLen = jsonObjTest.length;

var i=0,
    jsonReintegration = {};
	
for(i;i<jsonObjTestLen;i++){
	jsonReintegration[i] = jsonObjTest[i]
}

var sdTest = JSON.stringify(jsonReintegration).replace(/\\\\/g,"").replace(/\s+/g,"|")

searchJsonPropertyLine(prop2,sdTest)

searchJsonPropertyLine 函數js

function searchJsonPropertyLine(prop,lineToTextObject){   // 查找JSON的屬性行數

    var getPropertyString = prop

    // var getPropertyString = "PeerOrgs"
    var propArr = getPropertyString.split("|")
    var indexI = 0;
    var objectKey,
        objReg = /\[\d+\]/;

    var arrString = lineToTextObject,
        result,
        nextObjectNumber;
console.log("test" + arrString)
   

    while(propArr[indexI] !== undefined){

      objectKey = propArr[indexI]
      var numCheck = Boolean;
      var objectKeyLen = objectKey.length,
          positionLastIndex = [],
          sliceString,
          lineNum;
          numCheck = objReg.test(objectKey);

      if(numCheck){   // 有下標,例如[0]

        var objectCut1 = objectKey.slice(0,objectKeyLen - 1), // 去掉最後的"]"
            objectCut2 = objectCut1.lastIndexOf("[") , // 定位‘[’,
            objectCut3 = objectKey.slice(0,objectCut2); // 獲取屬性名

            propStringLen = objectCut3.length

        var objectKeyLen2 = objectCut3.length + 9;

        var indexArr = objectKey.slice(objectCut2 + 1,objectKeyLen - 1)  // 獲取下標籤


        var matchReg = '\\\\"' + objectCut3 +'\\\\":';

        var pattReg = new RegExp(matchReg,"g");

        if(sliceString == undefined){
            sliceString = arrString;
        }


        while ((result = pattReg.exec(sliceString)) != null)  {
          positionLastIndex.push(pattReg.lastIndex)
        }


        if(propArr.length == indexI+1){  // 判斷屬性名是不是最後一個

          var frontString = sliceString.slice(0,positionLastIndex[0]- propStringLen - 9),
              quotePosition = frontString.lastIndexOf('"');

              lineNum = Number(frontString.slice(quotePosition + 1,frontString.length)) + Number(indexArr) + 1;

              sliceString = sliceString.slice(quotePosition,sliceString.length)

        }else{
          nextObjectNumber = nextObjectNumber == undefined? 0 : nextObjectNumber;

          if(positionLastIndex[nextObjectNumber+1] == undefined){

            var frontString = sliceString.slice(0,positionLastIndex[nextObjectNumber]- propStringLen - 9),
                quotePosition = frontString.lastIndexOf('"');

                lineNum = frontString.slice(quotePosition + 1,frontString.length);

                sliceString = sliceString.slice(quotePosition,sliceString.length);

          }else{

            var frontString = sliceString.slice(0,positionLastIndex[nextObjectNumber] - propStringLen - 9),
                quotePosition = frontString.lastIndexOf('"'),
                lineLen ;

                lineNum = frontString.slice(quotePosition + 1,frontString.length)

                lineLen = lineNum.length
                sliceString = sliceString.slice(positionLastIndex[nextObjectNumber] - propStringLen - lineLen - 10,positionLastIndex[nextObjectNumber+1]- lineLen - propStringLen - 10)

          }

        }


        // console.log(positionLastIndex)
        // var frontString = sliceString.slice(0,positionLastIndex[0] - objectKeyLen2)
        // console.log(frontString)
        // sliceString = sliceString.slice(frontString.lastIndexOf('"'),-1)
        // lineNum = frontString.slice(frontString.lastIndexOf('"')+1,frontString.length)
        nextObjectNumber = Number(indexArr);

      }else{       // 沒有下標文件

        var matchReg = '\\\\"' + objectKey +'\\\\":'
            arrNumber="",
            result;

        var propStringLen = objectKey.length
        var pattReg = new RegExp(matchReg,"g");

        if(sliceString == undefined){
            sliceString = arrString;

        }
        while ((result = pattReg.exec(sliceString)) != null)  {
          positionLastIndex.push(pattReg.lastIndex)
        }
        // arrNumber = Number(nextObjectNumber+1)
        // console.log(arrNumber);


        if(positionLastIndex[nextObjectNumber+1] == undefined){ // 沒有重複的元素

          nextObjectNumber = nextObjectNumber == undefined? 0 : nextObjectNumber;
          var frontString = sliceString.slice(0,positionLastIndex[nextObjectNumber]- propStringLen - 9),
              quotePosition = frontString.lastIndexOf('"');

              lineNum = frontString.slice(quotePosition + 1,frontString.length);

              sliceString = sliceString.slice(quotePosition,sliceString.length)

        }else{   //有重複的元素

          nextObjectNumber = nextObjectNumber == undefined? 0 : nextObjectNumber;

          var frontString = sliceString.slice(0,positionLastIndex[nextObjectNumber] - propStringLen - 9),
              quotePosition = frontString.lastIndexOf('"'),
              lineLen ;
              lineNum = frontString.slice(quotePosition + 1,frontString.length)
              console.log(lineNum +"line4")
              lineLen = lineNum.length

          // console.log(sliceString.slice(0,positionLastIndex[nextObjectNumber] - propStringLen - 9))
          // console.log(sliceString.slice(0,positionLastIndex[nextObjectNumber+1] - propStringLen - 9))
          sliceString = sliceString.slice(positionLastIndex[nextObjectNumber] - propStringLen - lineLen - 10,positionLastIndex[nextObjectNumber+1]- lineLen - propStringLen - 10)



        }

        nextObjectNumber = undefined;
      }
      // console.log(lineNum+"line")
      indexI++;
    }
    return Number(lineNum)+1;

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章