加载两个具有相同父键名称的json文件

时间:2015-04-09 12:33:57

标签: javascript jquery html json merge

我有两个具有相同父键的json文件。

实施例: FILEA:

{ "results": [
    {
        "createdAt": "2014-02-25T23:49:39.076Z",
        "eventAddress": "1342 Worchester Drive Northeast",
        "eventAddress2": "",
        "eventCheckInCount": 600,
        "eventCity": "Atlanta",
        "eventCost": "100.00"
    }
}

FILEB:

{
    "results": [
        {
            "title": "NIGHT RIOTS",
            "url": "http://www.centerstage-atlanta.com/show?id=1688&artist=NIGHT+RIOTS",
            "date": "3/27/2015 0:00:00",
            "time": "7:00:00 PM"
        },
        {
            "title": "HORSE FEATHERS",
            "url": "http://www.centerstage-atlanta.com/show?id=1641&artist=HORSE+FEATHERS",
            "date": "3/23/2015 0:00:00",
            "time": ""
        }
}

基本上我已经编写了一个javascript代码来合并两个json输出中的键,但是当我给每个json输出这样的变量名时,我设法这样做了。

在FileA中: var filea = {"结果" :{[]}}

在FileB中: var fileb = {"结果" :{[]}}

但是,考虑到文件数量及其大小,添加" var filea ="是一件非常繁琐的工作。到每个json文件。在html中,如果我为上述两个文件都包含一个脚本标记,我如何将每个文件中的数据读入两个不同的变量。

根据您的经验,是否还有其他方法可以将json文件合并为一个。

此致

沙希德

2 个答案:

答案 0 :(得分:0)

我会连接两个文件,为简单起见删除空格,然后使用正则表达式查看“结果”的后面并捕获它。

这就是你如何从bash中做到这一点,我猜你可以用javascript做类似的事情,以备不时之需。

cat FileA.json FileB.json > concatenated.json
sed -r 's/\s+//g'
cat concatenated.json | grep -oE '"results":{[.*]}'

然后将该输出用于满足您需求的任何内容。

PS:您可以在here中测试正则表达式。

修改

如果您使用的是JQuery,是否有任何理由不能使用extend

答案 1 :(得分:0)

正如charlietfl在上面评论的那样,我最终使用XMLHttpRequest并将每个json文件加载到单独的变量中。在使用file://协议时,Chrome上的XMLHttpRequest失败,但我让我的用户切换到FF,因为Chrome也限制了该任务的其他部分。

沙希德

<input type="text" id="filea" value="" />
<input type="text" id="fileb" value="" />
<input type="button" value="Merge" onclick="mergeJSON();return false" />

<script>
    function getJSON(filename) {
        var req = new XMLHttpRequest();
        req.open('GET', filename, false); 
        req.send(null);
        if(req.status != 200)
            alert('Error reading file: ' + filename);
        return req.responseText;
    }

        fileaname = document.getElementById('filea').value;
        filebname = document.getElementById('fileb').value;

            //our return object
            var ret = getJSON(fileaname);
            var fileb = getJSON(filebname);

</script>