Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript/jquery中合并两个json对象?_Javascript_Jquery_Json - Fatal编程技术网

如何在javascript/jquery中合并两个json对象?

如何在javascript/jquery中合并两个json对象?,javascript,jquery,json,Javascript,Jquery,Json,我有一个如下所示的数据集: { "Stops": [ { "Name": "COLUMBIA RD NW + MINTWOOD PL NW", "Routes": [ "42", "43", "H1", "L2" ] } ] { "Predictions": [ { "DirectionText": "North

我有一个如下所示的数据集:

{
"Stops": [
    {
        "Name": "COLUMBIA RD NW + MINTWOOD PL NW",
        "Routes": [
            "42",
            "43",
            "H1",
            "L2"
        ]
    }
]
{
"Predictions": [
    {
        "DirectionText": "North to Mt Pleasant Via Adams Morgan",
        "Minutes": 7,
        "RouteID": "42"
    },
    {
        "DirectionText": "North to Mt Pleasant Via Adams Morgan",
        "Minutes": 25,
        "RouteID": "42"
    },
    {
        "DirectionText": "North to Chevy Chase Circle",
        "Minutes": 32,
        "RouteID": "L2"
    },
    {
        "DirectionText": "North to Mt Pleasant Via Adams Morgan",
        "Minutes": 36,
        "RouteID": "42"
    },
    {
        "DirectionText": "North to Mt Pleasant Via Adams Morgan",
        "Minutes": 58,
        "RouteID": "42"
    },
    {
        "DirectionText": "North to Mt Pleasant Via Adams Morgan",
        "Minutes": 69,
        "RouteID": "42",
    }
],
"StopName": "Columbia Rd Nw + Mintwood Pl Nw"
}

还有一个是这样的:

{
"Stops": [
    {
        "Name": "COLUMBIA RD NW + MINTWOOD PL NW",
        "Routes": [
            "42",
            "43",
            "H1",
            "L2"
        ]
    }
]
{
"Predictions": [
    {
        "DirectionText": "North to Mt Pleasant Via Adams Morgan",
        "Minutes": 7,
        "RouteID": "42"
    },
    {
        "DirectionText": "North to Mt Pleasant Via Adams Morgan",
        "Minutes": 25,
        "RouteID": "42"
    },
    {
        "DirectionText": "North to Chevy Chase Circle",
        "Minutes": 32,
        "RouteID": "L2"
    },
    {
        "DirectionText": "North to Mt Pleasant Via Adams Morgan",
        "Minutes": 36,
        "RouteID": "42"
    },
    {
        "DirectionText": "North to Mt Pleasant Via Adams Morgan",
        "Minutes": 58,
        "RouteID": "42"
    },
    {
        "DirectionText": "North to Mt Pleasant Via Adams Morgan",
        "Minutes": 69,
        "RouteID": "42",
    }
],
"StopName": "Columbia Rd Nw + Mintwood Pl Nw"
}

我想在第一组中结合路由ID上的数据,专门添加要设置的分钟数。因此,输出类似于:

{
"Stops": [
    {
        "Name": "COLUMBIA RD NW + MINTWOOD PL NW",
        "Routes": [
            {
                "42": [
                    {
                        "Minutes": [7, 25,36,58,69]
                    }
                ],
                "43": [
                    {
                        "Minutes": []
                    }
                ],
                "H1":[ 
                    {
                        "Minutes": []
                    }
                ],
                "L2": [
                    {
                        "Minutes": [32]
                    }
                ]
            }
        ],
        "StopID": "1001779"
    }
]
}

我一直在研究如何编写一些javascript/jquery来完成这个合并。有什么想法吗?

请看,这是更新后的代码,有空数组和所有内容。它是纯javascript的,因此不需要库。 我知道这只是一个粗糙的例子,但它很有效,我希望它能帮助你找到自己的方法。以后你可以改进它

var 

    stops = {
        "Stops": [
            {
                "Lat": 38.92092,
                "Lon": -77.043684,
                "Name": "COLUMBIA RD NW + MINTWOOD PL NW",
                "Routes": [
                    "42",
                    "43",
                    "H1",
                    "L2"
                ],
                "StopID": "1001779"
            }
        ]
    },

    predictions = {
        "Predictions": [
            {
                "DirectionNum": "1",
                "DirectionText": "North to Mt Pleasant Via Adams Morgan",
                "Minutes": 7,
                "RouteID": "42",
                "VehicleID": "7136"
            },
            {
                "DirectionNum": "1",
                "DirectionText": "North to Mt Pleasant Via Adams Morgan",
                "Minutes": 25,
                "RouteID": "42",
                "VehicleID": "7103"
            },
            {
                "DirectionNum": "0",
                "DirectionText": "North to Chevy Chase Circle",
                "Minutes": 32,
                "RouteID": "L2",
                "VehicleID": "2207"
            },
            {
                "DirectionNum": "1",
                "DirectionText": "North to Mt Pleasant Via Adams Morgan",
                "Minutes": 36,
                "RouteID": "42",
                "VehicleID": "7132"
            },
            {
                "DirectionNum": "1",
                "DirectionText": "North to Mt Pleasant Via Adams Morgan",
                "Minutes": 58,
                "RouteID": "42",
                "VehicleID": "7111"
            },
            {
                "DirectionNum": "1",
                "DirectionText": "North to Mt Pleasant Via Adams Morgan",
                "Minutes": 69,
                "RouteID": "42",
                "VehicleID": "7135"
            }
        ],
        "StopName": "Columbia Rd Nw + Mintwood Pl Nw"
    };

    var routeTimes = {};
    for (var index in predictions.Predictions) {
        if(!routeTimes.hasOwnProperty(predictions.Predictions[index].RouteID)) {
            routeTimes[predictions.Predictions[index].RouteID] = [];
            routeTimes[predictions.Predictions[index].RouteID].push(predictions.Predictions[index].Minutes);
        } else {
            routeTimes[predictions.Predictions[index].RouteID].push(predictions.Predictions[index].Minutes);
        }
    }

    var 
        routes = stops.Stops[0].Routes,
        routesVsMinutes = {};

    for(var i in routes) {
        if (!routesVsMinutes.hasOwnProperty(routes[i])) {
            routesVsMinutes[routes[i]] = {Minutes: []};
        } 
        if (routeTimes[routes[i]]) {
            routesVsMinutes[routes[i]].Minutes = routeTimes[routes[i]];
        }
    }      
    stops.Stops[0].Routes = routesVsMinutes;

    console.log(stops);
您可以使用:

与:

json1 = {"Stops":[...]}
json2 = {"Predictions:[...]}

@adeneo我怀疑
$.extend()
是否能胜任这项工作
for
loop是一种正确的方法,我想。你的数据集在哪里?如果是JSON,那么您需要以某种方式读取它们,并将它们解析为Javascript对象。您需要将结果作为Javascript对象还是JSON?我猜这样的东西应该可以吗?请发布您到目前为止的内容…谢谢Vlad,这真的很接近!现在,下一个技巧是为没有预测的路由添加空白数组routeTimes@JasonRosenbaum我已经用更新的代码示例编辑了我的答案。看看。是的,看起来不错!非常感谢,这给了这个项目一个新的开始。Vlad,我的应用程序今天发布了,我想说声谢谢!我已经使用并编辑了你的代码,我在源代码中记下了你的名字。更多细节:@JasonRosenbaum哇,谢谢!这非常令人兴奋。祝你好运,很高兴我能帮助你。如果你的代码出现错误,Stops是一个数组,因此它应该是json1.Stops[0]。Routes。我没有测试你的代码,但这让我很吃惊。这是真的!你也可以在数组上做一个映射来添加其他案例,但我会保持停止[0]