使用生成的查询字符串在 JSON 对象中搜索
Searching in a JSON object with generated query string
我正在尝试使用 Lo-Dash 在 Angular JS 中搜索 JSON 对象。这里的挑战是我的 JSON 结构将动态变化。因此,我的搜索查询字符串也必须更改。
我的 JSON 格式为:
{
"SERIES": "ABC000123123",
"SECTOR": "E",
"INDUSTRY": "N31",
"DURATION": "1A" },
{ "SERIES": "ABC000123456",
"SECTOR": "E",
"INDUSTRY": "N11",
"DURATION": "12" },
{ "SERIES": "ABC000456789",
"SECTOR": "E",
"INDUSTRY": "N31",
"DURATION": "1B" }
我的JSON也可以是下面的格式:
{
"SERIES": "DEF000321",
"AREA": "C2",
"ITEM": "123" },
{
"SERIES": "DEF000321",
"AREA": "D0",
"ITEM": "675" },
键 AREA、ITEM、SECTOR、INDUSTRY 等会有所不同。
在上述所有情况下,只有 SERIES 字段保持不变。
我需要传入其余属性的键值对来检索 SERIES 值。
为简单起见,我使用 lodash 搜索上述 JSON 的方法如下:
_.map(_.filter(JSON_Object, function (value) {
return (value.AREA == D0) && (value.ITEM == C2) }), 'SERIES');
我在其中以编程方式生成以下字符串:
(value.AREA == 'D0') && (value.ITEM == 'C2')
这种方法行不通。
当我对这些值进行硬编码时,它工作正常。当我以编程方式生成查询字符串时,不是相反吗?
我尝试遍历列表并一次过滤掉一个属性,但这会增加循环次数和搜索的复杂性。
有什么建议/解决方法吗?提前致谢
编辑:添加了控制台截图:
enter image description here
试试这个方法:https://fiddle.jshell.net/koljada/53esaqLz/1/
var JSON_Object = [{
"SERIES": "ABC000123123",
"SECTOR": "E",
"INDUSTRY": "N31",
"DURATION": "1A"
}, {
"SERIES": "ABC000123456",
"SECTOR": "E",
"INDUSTRY": "N11",
"DURATION": "12"
}, {
"SERIES": "ABC000456789",
"SECTOR": "E",
"INDUSTRY": "N31",
"DURATION": "1B"
}];
var query = "(value.SECTOR == 'E') && (value.INDUSTRY == 'N11')";
var result = _(JSON_Object)
.filter(new Function("value", "return " + query))
.map('SERIES')
.value(); // => ["ABC000123456"]
我正在尝试使用 Lo-Dash 在 Angular JS 中搜索 JSON 对象。这里的挑战是我的 JSON 结构将动态变化。因此,我的搜索查询字符串也必须更改。
我的 JSON 格式为:
{
"SERIES": "ABC000123123",
"SECTOR": "E",
"INDUSTRY": "N31",
"DURATION": "1A" },
{ "SERIES": "ABC000123456",
"SECTOR": "E",
"INDUSTRY": "N11",
"DURATION": "12" },
{ "SERIES": "ABC000456789",
"SECTOR": "E",
"INDUSTRY": "N31",
"DURATION": "1B" }
我的JSON也可以是下面的格式:
{
"SERIES": "DEF000321",
"AREA": "C2",
"ITEM": "123" },
{
"SERIES": "DEF000321",
"AREA": "D0",
"ITEM": "675" },
键 AREA、ITEM、SECTOR、INDUSTRY 等会有所不同。
在上述所有情况下,只有 SERIES 字段保持不变。 我需要传入其余属性的键值对来检索 SERIES 值。
为简单起见,我使用 lodash 搜索上述 JSON 的方法如下:
_.map(_.filter(JSON_Object, function (value) {
return (value.AREA == D0) && (value.ITEM == C2) }), 'SERIES');
我在其中以编程方式生成以下字符串:
(value.AREA == 'D0') && (value.ITEM == 'C2')
这种方法行不通。 当我对这些值进行硬编码时,它工作正常。当我以编程方式生成查询字符串时,不是相反吗?
我尝试遍历列表并一次过滤掉一个属性,但这会增加循环次数和搜索的复杂性。
有什么建议/解决方法吗?提前致谢
编辑:添加了控制台截图: enter image description here
试试这个方法:https://fiddle.jshell.net/koljada/53esaqLz/1/
var JSON_Object = [{
"SERIES": "ABC000123123",
"SECTOR": "E",
"INDUSTRY": "N31",
"DURATION": "1A"
}, {
"SERIES": "ABC000123456",
"SECTOR": "E",
"INDUSTRY": "N11",
"DURATION": "12"
}, {
"SERIES": "ABC000456789",
"SECTOR": "E",
"INDUSTRY": "N31",
"DURATION": "1B"
}];
var query = "(value.SECTOR == 'E') && (value.INDUSTRY == 'N11')";
var result = _(JSON_Object)
.filter(new Function("value", "return " + query))
.map('SERIES')
.value(); // => ["ABC000123456"]