【问题标题】:Get value from json string using key's value [duplicate]使用键的值从json字符串中获取值[重复]
【发布时间】:2017-05-08 20:26:26
【问题描述】:

嗨,我有一个 json 字符串

"{"data":[{"Id":14,"ConfigName":"Online Hrs","ConfigValue":"00:01-23:59"},{"Id":15,"ConfigName":"Offline Days","ConfigValue":"Sunday"},{"Id":0,"ConfigName":"CurrentTime","ConfigValue":"11:3"}]}"

我想查看ConfigValue 中的ConfigName“CurrentTime”。 目前我正在通过以下代码访问它

var d = JSON.parse(data).data;
d[2].ConfigValue

但有时 json 字符串会是

"{"data":[{"Id":14,"ConfigName":"Online Hrs","ConfigValue":"00:01-23:59"},{"Id":0,"ConfigName":"CurrentTime","ConfigValue":"11:3"}]}"

如果我想访问“CurrentTime”,现在根据上面的字符串

我将不得不写下面的代码

 var d = JSON.parse(data).data;
    d[1].ConfigValue

那么任何人都可以告诉如何访问它吗?因为数组可能随时更改,所以我不能像那样对数组索引进行硬编码。

【问题讨论】:

标签: javascript


【解决方案1】:

您可以运行一个循环并检查ConfigName 的值。下面是代码

var data = '{"data":[{"Id":14,"ConfigName":"Online Hrs","ConfigValue":"00:01-23:59"},{"Id":15,"ConfigName":"Offline Days","ConfigValue":"Sunday"},{"Id":0,"ConfigName":"CurrentTime","ConfigValue":"11:3"}]}';
var d = JSON.parse(data).data;

for(var i=0; i<d.length; i++)
{
if(d[i].ConfigName === 'CurrentTime')
  {
  	alert(d[i].ConfigValue); //Do stuff with the value.
  }
}

【讨论】:

  • 依靠这个值只包含一个: 的事实是如此的骇人听闻。为什么不直接寻找 ConfigName === 'CurrentTime' 所在的对象?
  • @FelixKling 是的,你是对的。我的错。
【解决方案2】:

您首先需要在数组中找到“ConfigValue”等于“CurrentTime”的对象。一旦你有了这个对象,你就可以简单地访问它的“CongigValue”属性。

var json1 = {"data":
             [
               {"Id":14,"ConfigName":"Online Hrs","ConfigValue":"00:01-23:59"},{"Id":15,"ConfigName":"Offline Days","ConfigValue":"Sunday"},{"Id":0,"ConfigName":"CurrentTime","ConfigValue":"11:3"}
             ]
            };

var json2 = {"data":
             [
               {"Id":14,"ConfigName":"Online Hrs","ConfigValue":"00:01-23:59"},{"Id":0,"ConfigName":"CurrentTime","ConfigValue":"11:3"}
             ]
            };


var currentTime = findCurrentTime( json1 );
console.log( "currentTime: " + currentTime );

var currentTime = findCurrentTime( json2 );
console.log( "currentTime: " + currentTime );



function findCurrentTime( jsonObj )
{
  var filteredArray = jsonObj.data.filter(function(element){
     return element.ConfigName === "CurrentTime";
  });//filter()

  if( filteredArray.length > 0 )
    return filteredArray[0].ConfigValue;
  
  return false;
}//findCurrentTime()

【讨论】:

    【解决方案3】:

    字符串内部和外部的引号相同,没有转义。但也许它只发生在问题文本中。

    在这种情况下,您需要像这样检查每个项目:

     for (var i in d) {
       if (d[i].Id == 0) {
           alert(d[i].ConfigName);
       }
     }
    

    【讨论】:

      【解决方案4】:

      你可以试试这个:

      var k = {"data":[{"Id":14,"ConfigName":"Online Hrs","ConfigValue":"00:01-23:59"},{"Id":15,"ConfigName":"Offline Days","ConfigValue":"Sunday"},{"Id":0,"ConfigName":"CurrentTime","ConfigValue":"11:3"}]}
          
          var result = $(jQuery.parseJSON(JSON.stringify(k))).each(function() {  
               var configName = this.ConfigName;
               var configValue = this.ConfigValue;
               
          });
       console.log(result);
      &lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;

      【讨论】:

      • 为什么在这里使用jQuery?为什么将对象转换为 JSON 只是为了再次解析它?似乎比它需要的要复杂。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-12
      • 1970-01-01
      • 2013-06-11
      • 2021-11-20
      • 2023-02-15
      • 1970-01-01
      相关资源
      最近更新 更多