Javascript 加载两个具有相同父密钥名的json文件

Javascript 加载两个具有相同父密钥名的json文件,javascript,jquery,html,json,merge,Javascript,Jquery,Html,Json,Merge,我有两个具有相同父密钥的json文件 例如: 文件A: 文件B: { "results": [ { "title": "NIGHT RIOTS", "url": "http://www.centerstage-atlanta.com/show?id=1688&artist=NIGHT+RIOTS", "date": "3/27/2015 0:00:00", "time"

我有两个具有相同父密钥的json文件

例如: 文件A:

文件B:

{
    "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输出中的键,但是当我像这样给每个键指定一个变量名时,我成功地做到了这一点

在文件A中: var filea={“结果”:{[]}

在文件B中: var fileb={“结果”:{[]}

然而,考虑到文件的数量及其大小,在每个json文件中添加“var filea=”是一件乏味的事情。在html中,如果我为上述两个文件都包含一个脚本标记,那么如何将每个文件中的数据读入两个不同的变量中

根据您的经验,是否有其他方法将json文件合并到一个文件中

问候,


Shahid

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

<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>
这是从bash中实现的方法,我想如果需要的话,可以使用javascript来实现

cat FileA.json FileB.json > concatenated.json
sed -r 's/\s+//g'
cat concatenated.json | grep -oE '"results":{[.*]}'
然后将输出用于任何适合您需要的地方

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

编辑:


如果使用JQuery,有什么原因不能直接使用吗?

正如charlietfl在上面所评论的,我最终使用了XMLHttpRequest并将每个json文件加载到单独的变量中。当使用file://protocol时,XMLHttpRequest在Chrome上失败,但我让用户切换到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>

函数getJSON(文件名){
var req=新的XMLHttpRequest();
请求打开('GET',文件名,false);
请求发送(空);
如果(请求状态!=200)
警报(“读取文件时出错:”+文件名);
返回请求响应文本;
}
fileaname=document.getElementById('filea').value;
filebname=document.getElementById('fileb')。值;
//我们的归宿
var ret=getJSON(fileaname);
var fileb=getJSON(filebname);

串联的一个问题是,两个文件中的某些子键可能具有不同的值。在这种情况下,filea中的值需要优先于另一个值。但这样做的目的不是存储连接的文本,而是使用正则表达式从中提取所需的部分,然后使用正则表达式的输出。另外,请注意,连接并不是完全必要的,您可以对每个文件执行正则表达式,然后对每个输出执行逻辑。我刚才提到了这种方式,因为对于最简单的情况来说,它是最简单的执行方式。为什么需要
var
?如果使用ajax加载文件,则不需要它,而且实际上会失败,因为它不再是有效的json。另一种选择是读取服务器上的文件,解码到数组并在其中合并。实际上,我根本没有使用jQuery,这是stackoverflow建议的标记。我试图避免使用基于服务器的任何东西。现在,我正在使用一个简单的.html文件进行脱机操作。不过,我得到了您的建议,您希望我将这两个文件动态加载到一个单独的变量中,而不是使用标记。但是,我不确定当html文件在file://协议上运行时是否支持它。我查一下。您可以建议使用ajaxno加载代码吗?它不是…尽管您可以使用浏览器设置强制加载代码。如果有帮助的话,你也可以在你的机器上安装一个本地服务器