我有两个具有相同父键的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文件合并为一个。
此致
沙希德
答案 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>