根据变量搜索 JSON 数组

Search JSON Array based on variable?

本文关键字:JSON 数组 搜索 变量      更新时间:2023-09-26

我有一个需要搜索的JSON数组:

[
{
      "Device_ID":"1",
      "Image":"HTC-One-X.png",
      "Manufacturer":"HTC",
      "Model":"One X",
      "Region":"GSM",
      "Type":"Phone"
   },
   {
      "Device_ID":"2",
      "Image":"Motorola-Xoom.png",
      "Manufacturer":"Motorola",
      "Model":"Xoom",
      "Region":"CDMA",
      "Type":"Tablet"
   },
   {
      "Device_ID":"8",
      "Image":"null",
      "Manufacturer":"Motorola",
      "Model":"Xoom 2",
      "Region":"CDMA",
      "Type":"Tablet"
   }
]

使用关键字:$_GET['keyword'];我需要能够执行以下操作。搜索制造商和型号的组合值,即。摩托罗拉Xoom。 然后,对于与此匹配的任何一组值,将它们输出到变量。

例如:如果关键字是HTC,那么它将搜索数组并输出:

$DeviceID = 1 $Image = HTC-One-X.png $Manufacturer = HTC $Model = One
X $Region = GSM $Type = Type

但是,如果关键字是摩托罗拉,则需要输出包含摩托罗拉的所有条目。

我试图做的是在用户键入关键字时输出所有 JSON 数组条目的实时视图。 但是,我希望它在用户计算机上运行以减少服务器上的负载。

有谁知道最好的方法吗?

好吧,

如果您在选项部分中有一个带有制造商值的选择框,那么它就像:

.HTML:

<select id="selectionBox">
  <option>...</option>
</select>
<div id="outPut">
  output goes in here
</div>

Javascript:

var selectedValue = document.getElementById("selectionBox").value;
for(var i = 0; i < jsonObject.length; i++){
  if(jsonObject[i].Manufacturer === selectedValue){
    //considering your object is an array let's
    for(var key in jsonObject[i]){
      document.getElementById("outPut").innerHTML += jsonObject[i][key] + "</br>";
    }
  }
}

这几乎会将对象中的所有内容打印到输出div 上,其余的取决于您的样式。

这是一个用于过滤 JSON 的函数。显示数据由您决定。

var devices = <your JSON array>;    
function filter(keyword, data) {
    var filteredArray = [], i, j;
    for (i = 0, j = data.length; i < j; i++) {
        if ((data[i].Manufacturer && data[i].Manufacturer.indexOf(keyword) !== -1) || (data[i].Model && data[i].Model.indexOf(keyword) !== -1)) {
            filteredArray.push(data[i]);
        }
    }
    return filteredArray;
}
// Example usage
var MotorolaDevices = filter('Motorola', devices);