Javascript 无法在JS中合并JSON
我对合并JSON有问题 我有一个ajax查询,它向我的数据库查询记录。不幸的是,我必须设置退货记录限制(1000条记录)。在我的数据库中有3122条记录。这意味着我必须创建一个4个查询。我从数据库接收JSON格式的记录。每次查询之后,我都会尝试将旧的JSON与新的JSON合并。不幸的是,现在我只覆盖我的旧JSON 示例JSON答案: { “d”:[ { “数据”:{ “姓名”:“约翰”,“姓氏”:“史密斯”,“年份”:“21” },“城市”:“新城市” 约克,“街”:“墙” “街道” },{ “数据”:{ “姓名”:“乔治”,“姓氏”:“史密斯”,“年份”:“26” },“城市”:“拉斯维加斯”,“街道”:“凯撒” }]" 所有返回的JSON都具有相同的结构,但数据不同 我的JS代码如下所示:Javascript 无法在JS中合并JSON,javascript,jquery,json,Javascript,Jquery,Json,我对合并JSON有问题 我有一个ajax查询,它向我的数据库查询记录。不幸的是,我必须设置退货记录限制(1000条记录)。在我的数据库中有3122条记录。这意味着我必须创建一个4个查询。我从数据库接收JSON格式的记录。每次查询之后,我都会尝试将旧的JSON与新的JSON合并。不幸的是,现在我只覆盖我的旧JSON 示例JSON答案: { “d”:[ { “数据”:{ “姓名”:“约翰”,“姓氏”:“史密斯”,“年份”:“21” },“城市”:“新城市” 约克,“街”:“墙” “街道” },{ “
var jsonVar;
function createQuery(itemCount) {
var top = 1000;
var skip = 0;
var urlQuery = databaseURL+skip;
if (itemCount > 1000) {
var loopQuery = Math.round(itemCount / 1000);
for (var i = 0; i < loopQuery + 1; i++) {
skip = 1000 * i;
urlQuery = databaseURL+skip;
var call = $.ajax({
url: urlQuery,
type: "GET",
dataType: "json",
async: false,
headers: {
Accept: "application/json;odata=verbose"
},
success: function (data, textStatus, jqXHR) {
merge(jqXHR);
}
});
}
alert(jsonVar.responseText);
} else {
}
function merge(jqXHR) {
alert(jqXHR.responseText);
jsonVar = $.extend(jsonVar, jqXHR);
}
在给定的代码中,合并函数中的行
jsonVar = $.extend(jsonVar, jqXHR);
产生问题的原因是您正在扩展jsonVar中的jqXHR(它是XMLHTTPRequest对象的超集)属性
试试这个代码
var tempdata = $.parseJSON(jqXHR.responseText);
jsonVar = $.merge(jsonVar,tempdata.d);
请尝试以下示例代码:
var tempData = {
"d":[
{
"data":{
"name":"John","surname":"Smith","year":"21"
},"city":"New York","Street":"Wall Street"
},{
"data":{
"name":"George","surname":"Smith","year":"26"
},"city":"Las Vegas","Street":"Ceasar"
}]
}
var jsonVar = [
{
"data":{
"name":"John","surname":"Smith","year":"21"
},"city":"New York","Street":"Wall Street"
},{
"data":{
"name":"George","surname":"Smith","year":"26"
},"city":"Las Vegas","Street":"Ceasar"
}];
jsonVar = $.merge(jsonVar,tempData.d);
console.log(jsonVar);
非常感谢@RakeshChouhan 我修改了一点代码,多亏了
$。merge
工作正常
在第一步中,我将向jsonVar
添加一个对象,合并后将其删除
我这样做是因为在开始时的jsonVar
为空且$。merge
返回错误,它无法返回未定义的长度(jsonVar
为空)
这是我的密码:
var jsonVar;
function createQuery(itemCount) {
var top = 1000;
var skip = 0;
var urlQuery = databaseURL+skip;
if (itemCount > 1000) {
var loopQuery = Math.round(itemCount / 1000);
for (var i = 0; i < loopQuery + 1; i++) {
skip = 1000 * i;
urlQuery = databaseURL+skip;
var call = $.ajax({
url: urlQuery,
type: "GET",
dataType: "json",
async: false,
headers: {
Accept: "application/json;odata=verbose"
},
success: function (data, textStatus, jqXHR) {
merge(data);
}
});
}
} else {
}
function pairJson(data,i) {
if(jsonVar == undefined){
jsonVar = [{name:'delete me'}];
}
jsonVar = $.merge(jsonVar,data.d);
if(i == 0){
jsonVar.splice(0,1);
}
}
}
var-jsonVar;
函数createQuery(itemCount){
var-top=1000;
var-skip=0;
var urlQuery=databaseURL+skip;
如果(itemCount>1000){
var loopQuery=Math.round(itemCount/1000);
对于(变量i=0;i
对此我不是很确定,但它不会是jsonVar=$.extend(jsonVar.d,jqXHR)
因为d
键将被替换,因为它始终是同一个键。请确保在第一次使用之前初始化了jsonVar.d。不幸的是,在开始时,jsonVar为空。在第一步,它会返回一个错误“无法读取未定义的属性“d”。不幸的是,即使第一步也无法完成。我收到此错误:”当我将$.merge更改为$.extend时,无法读取undefined“的属性'length',它正在工作,但问题是相同的。它只是在覆盖JSON,因此JSON响应可能有问题。
var jsonVar;
function createQuery(itemCount) {
var top = 1000;
var skip = 0;
var urlQuery = databaseURL+skip;
if (itemCount > 1000) {
var loopQuery = Math.round(itemCount / 1000);
for (var i = 0; i < loopQuery + 1; i++) {
skip = 1000 * i;
urlQuery = databaseURL+skip;
var call = $.ajax({
url: urlQuery,
type: "GET",
dataType: "json",
async: false,
headers: {
Accept: "application/json;odata=verbose"
},
success: function (data, textStatus, jqXHR) {
merge(data);
}
});
}
} else {
}
function pairJson(data,i) {
if(jsonVar == undefined){
jsonVar = [{name:'delete me'}];
}
jsonVar = $.merge(jsonVar,data.d);
if(i == 0){
jsonVar.splice(0,1);
}
}
}