3

在 Javascript 中运行 JSONPath 时遇到性能问题(使用Stephan Goessner 有用的库

具有以下 JSON 结构。

[
    {
    id:1, 
    name: "lorem", 
    elements: 
    [
        {
            id:101,
            date: Fri Jan 31 2014 18:03:41 GMT+0100 (Paris, Madrid),  // Javascript Date Object,
            instances: [ 
                {
                    id: 1001, 
                    properties: [
                        {
                            code: 'ipsum lens', 
                            id: 1001, 
                            values: [
                                "value1", 
                                "value2",
                                ...
                                // less than 5 values
                            ]
                        }, 
                        ... , / between 20 to 40 items
                    ]
                },
                ... // About 100 items
            ]
        },
        ... // Less than 5 items
    ], 
    meta: [
        {
            id: 10000, 
            code: 'codeabc', 
            property1: true, 
            property2: false,
            property3: 2939, 
        }, 
        ... // between 20 to 40 items
    ]
    }, 
    ... // 4 items
]

以下是数量

  • level1 包含 4 个项目
  • level2 'elements' 在每个级别包含 2 个项目
  • level3 'instances' 在我的特定元素上包含大约 100 个项目(其他完全一样)
  • level4 'properties' 包含大约 15 个项目

使用JSON 路径,以下代码在 chrome 中给我的响应时间接近 4 秒

var startDate = new Date();
var searchedValue = jsonPath(
    myJSONStore, 
    "$.[?(@.name == 'myelementname')].elements[?(@.id == 100)].date"
)[0];
console.log(date)
console.log("Get in " + ((new Date().getTime() - startDate.getTime()) / 1000) + "s")

考虑到低数据量,我发现这个延迟真的很长。 我也尝试了这个经典代码,没有 jsonPath

var startDate = new Date();
var searchedValue = null;
for(i in myJSONStore) { 
    if (myJSONStore[i].name == 'myelementname') { 
        for (j in myJSONStore[i].elements) {
            if (myJSONStore[i].elements[j].id == 100) {
                var date = myJSONStore[i].elements[j].date;
                break;
            }
        }
    }
}
console.log(date)
console.log("Get in " + ((new Date().getTime() - startDate.getTime()) / 1000) + "s")

这一次,只用了 1 毫秒

JsonPath 因其简单而简短的语法而保持了他的吸引力(就像在吻原则中,我沉迷其中)......但是有没有办法减少计算延迟......?大约4000 倍以上是相当令人印象深刻的

4

1 回答 1

-1

1) 在 aspx.cs 页面中使用下面的代码。

string path= "你的 JSON 文件路径"; Hiddenfield.Value = File.ReadAllText(path);

2)之后,尝试在aspx页面中使用以下代码,即通过隐藏字段获取json对象。

var xyz =$.parseJSON(document.getElementById('<%=Hiddenfield.ClientID%>').value);

于 2014-02-03T14:05:39.870 回答