如何组合具有相同名称的 JSON 对象?
Posted
技术标签:
【中文标题】如何组合具有相同名称的 JSON 对象?【英文标题】:How do I combine JSON objects with the same name? 【发布时间】:2018-07-01 17:51:49 【问题描述】:我一直在寻找,但似乎无法找到答案。
假设我有一个数据库,其中包含有关房屋每个房间使用多少公斤食材的信息,具体取决于一年中的季节以及使用它们的厨师,尽管厨师仅用于“WHERE”子句。此信息由 Web 应用程序(不是我开发的)收集并存储在其数据库中。我正在尝试通过创建一些新页面和报告来扩展应用程序,主要用于显示信息。 SQL(Oracle)输出如下(我省略了几列,不感兴趣):
| ROOM_ID | SEASON | ING_S1 | ING_S2 | ING_S3 |
| 1234567 | 1 | 35 | | |
| 1234567 | 2 | | 24 | |
| 1234567 | 3 | | | 15 |
| 2233445 | 2 | | 60 | |
| 2233445 | 3 | | | 41 |
成分列来自一系列非常复杂的连接,需要从应用程序中的其他表中提取它们。
这个 Web 应用程序允许我在 html 中将其放入 JSON,并且我设法使它看起来像这样:
"1234567" :
"roomName" : "blabla",
"season" : "1",
"ingredientsS1" : "35",
"ingredientsS2" : "",
"ingredientsS3" : "",
,
"1234567" :
"roomName" : "blabla",
"season" : "2",
"ingredientsS1" : "",
"ingredientsS2" : "24",
"ingredientsS3" : "",
,
"1234567" :
"roomName" : "blabla",
"season" : "3",
"ingredientsS1" : "",
"ingredientsS2" : "",
"ingredientsS3" : "15",
,
等等……
我想看到的是:
"1234567" :
"roomName" : "blabla",
"ingredientsS1" : "35",
"ingredientsS2" : "24",
"ingredientsS3" : "15",
,
我一辈子都想不出如何合并 roomID 定义的每个对象的属性!我尝试以一百万种方式重新处理查询,以查看是否可以将所有结果合并到一行(listagg 等),从而让 Web 应用程序仅创建一个 JSON 对象,我尝试查看解决方案使用 jQuery 和纯 javascript...没有骰子。
我还将开始使用 Vue.js 为页面添加更多功能,但我似乎也无法在该路线上找到任何解决方案。
感谢您的帮助,感谢您的宝贵时间!
【问题讨论】:
提供您目前拥有的脚本,我们将帮助实现这一目标 "'我设法让它看起来像这样",不,你不能拥有多个同名键。 控制台没有显示错误吗? Javascript 对象不能包含与该对象相同的键。这是您服务器的真实响应吗? 服务器所做的是它允许您使用应用程序专用的标签运行 SQL 查询,然后将数据作为文本行输出,将字段放置在您想要的任何位置同一行。 Nina,Christoforus - 当然它不是有效的 JSON,因为有多个具有相同名称的键,抱歉 - 我应该说的是 Web 应用程序允许我创建一个类似于上面的文本文档。当我在浏览器中加载文本文档时,就会出现这种情况——我没有在 JS 中使用它,因为它无效。 @LGSon 通过脚本,您的意思是查询吗?谢谢!! 如果可以将数据输出为对象数组,这个是可以解决的。 【参考方案1】:假设您从数据库中获取数据作为对象,您可以迭代对象并获取新对象的属性。
对于赋值,您可以使用SEASON
来处理相关成分。
var data = [
ROOM_ID: 1234567, SEASON: 1, ING_S1: 35, ING_S2: null, ING_S3: null ,
ROOM_ID: 1234567, SEASON: 2, ING_S1: null, ING_S2: 24, ING_S3: null ,
ROOM_ID: 1234567, SEASON: 3, ING_S1: null, ING_S2: null, ING_S3: 15 ,
ROOM_ID: 2233445, SEASON: 2, ING_S1: null, ING_S2: 60, ING_S3: null ,
ROOM_ID: 2233445, SEASON: 3, ING_S1: null, ING_S2: null, ING_S3: 41
],
result = ;
data.forEach(( ROOM_ID, SEASON, ING_S1, ING_S2, ING_S3 ) =>
result[ROOM_ID] = result[ROOM_ID] || roomName: 'blabla', ingredientsS1: '', ingredientsS2: '', ingredientsS3: '' ;
result[ROOM_ID]['ingredientsS' + SEASON] = [ING_S1, ING_S2, ING_S3][SEASON - 1];
);
console.log(result);
.as-console-wrapper max-height: 100% !important; top: 0;
【讨论】:
天哪!这太棒了!你真是个天才!!!我将代码改编为真实数据(很抱歉,由于合规法律,我无法发布),到目前为止效果很好!谢谢你!!!我在哪里可以了解更多关于你所做的事情?以上是关于如何组合具有相同名称的 JSON 对象?的主要内容,如果未能解决你的问题,请参考以下文章