Json 将嵌套对象转换为关系格式
我有关于用户配置文件的JSON数据,我希望最终用SPSS进行分析。 目前我在Google Refine中导入了数据,以运行一些数据清理。然而,我的问题是,原始JSON由嵌套对象组成,例如“专业经验”部分与“公司”,其中包括多个子对象/数组(参见示例)。GoogleRefine通过创建包含该信息的附加行来处理此问题。然而,这与我需要使用SPSS或Excel或其他工具分析数据的“关系型”(SQL)视图/表结构并不一致,因为还有其他子对象(学校、奖项等),它们也“愚蠢地”填充在高级“主”记录下的行中,但没有直接的(行/列)相互之间的关系(考虑分析) 在我看来,我需要将这些(子对象)列和行提取到自己的表中,并创建一些n:m关系,或者至少将其规范化为一个表(当然,然后接受其他未列出属性的冗余) 我想要得到的是一个一致的表,用于对某些属性运行统计分析/聚类。我假设map reduce在这里不是一个真正的选项 你们有没有人知道如何处理这个问题,或者有没有更简单的方法直接处理JSON数据Json 将嵌套对象转换为关系格式,json,database-normalization,data-analysis,openrefine,Json,Database Normalization,Data Analysis,Openrefine,我有关于用户配置文件的JSON数据,我希望最终用SPSS进行分析。 目前我在Google Refine中导入了数据,以运行一些数据清理。然而,我的问题是,原始JSON由嵌套对象组成,例如“专业经验”部分与“公司”,其中包括多个子对象/数组(参见示例)。GoogleRefine通过创建包含该信息的附加行来处理此问题。然而,这与我需要使用SPSS或Excel或其他工具分析数据的“关系型”(SQL)视图/表结构并不一致,因为还有其他子对象(学校、奖项等),它们也“愚蠢地”填充在高级“主”记录下的行中,
{ "users": [
{
"id": "123456_abcdef",
"first_name": "Max",
"last_name": "Mustermann",
"display_name": "Max Mustermann",
"page_name": "Max_Mustermann",
"permalink": "https://www.xing.com/profile/Max_Mustermann",
"employment_status": "EMPLOYEE",
"gender": "m",
"birth_date": {
"day": 12,
"month": 8,
"year": 1963
},
"active_email": "max.mustermann@xing.com",
"time_zone": {
"name": "Europe/Copenhagen",
"utc_offset": 2.0
},
"premium_services": [
"SEARCH",
"PRIVATEMESSAGES"
],
"badges": [
"PREMIUM",
"MODERATOR"
],
"wants": "einen neuen Job",
"haves": "viele tolle Skills",
"interests": "Flitzebogen schießen and so on",
"organisation_member": "ACM, GI",
"languages": {
"de": "NATIVE",
"en": "FLUENT",
"fr": null,
"zh": "BASIC"
},
"private_address": {
"city": "Hamburg",
"country": "DE",
"zip_code": "20357",
"street": "Privatstraße 1",
"phone": "49|40|1234560",
"fax": "||",
"province": "Hamburg",
"email": "max@mustermann.de",
"mobile_phone": "49|0155|1234567"
},
"business_address": {
"city": "Hamburg",
"country": "DE",
"zip_code": "20357",
"street": "Geschäftsstraße 1a",
"phone": "49|40|1234569",
"fax": "49|40|1234561",
"province": "Hamburg",
"email": "max.mustermann@xing.com",
"mobile_phone": "49|160|66666661"
},
"web_profiles": {
"qype": [
"http://qype.de/users/foo"
],
"google+": [
"http://plus.google.com/foo"
],
"other": [
"http://blog.example.org"
],
"homepage": [
"http://example.org",
"http://other-example.org"
]
},
"instant_messaging_accounts": {
"skype": "1122334455",
"googletalk": "max.mustermann"
},
"professional_experience": {
"primary_company": {
"id": "1_abcdef",
"name": "XING AG",
"title": "Softwareentwickler",
"company_size": "201-500",
"tag": null,
"url": "http://www.xing.com",
"career_level": "PROFESSIONAL_EXPERIENCED",
"begin_date": "2010-01",
"description": null,
"end_date": null,
"industry": "AEROSPACE",
"form_of_employment": "FULL_TIME_EMPLOYEE",
"until_now": true
},
"companies": [
{
"id": "1_abcdef",
"name": "XING AG",
"title": "Softwareentwickler",
"company_size": "201-500",
"tag": null,
"url": "http://www.xing.com",
"career_level": "PROFESSIONAL_EXPERIENCED",
"begin_date": "2010-01",
"description": null,
"end_date": null,
"industry": "AEROSPACE",
"form_of_employment": "FULL_TIME_EMPLOYEE",
"until_now": true
},
{
"id": "24_abcdef",
"name": "Ninja Ltd.",
"title": "DevOps",
"company_size": null,
"tag": "NINJA",
"url": "http://www.ninja-ltd.co.uk",
"career_level": null,
"begin_date": "2009-04",
"description": null,
"end_date": "2010-07",
"industry": "ALTERNATIVE_MEDICINE",
"form_of_employment": "OWNER",
"until_now": false
},
{
"id": "45_abcdef",
"name": null,
"title": "Wiss. Mitarbeiter",
"company_size": null,
"tag": "OFFIS",
"url": "http://www.uni.de",
"career_level": null,
"begin_date": "2007",
"description": null,
"end_date": "2008",
"industry": "APPAREL_AND_FASHION",
"form_of_employment": "PART_TIME_EMPLOYEE",
"until_now": false
},
{
"id": "176_abcdef",
"name": null,
"title": "TEST NINJA",
"company_size": "201-500",
"tag": "TESTCOMPANY",
"url": null,
"career_level": "ENTRY_LEVEL",
"begin_date": "1998-12",
"description": null,
"end_date": "1999-05",
"industry": "ARTS_AND_CRAFTS",
"form_of_employment": "INTERN",
"until_now": false
}
],
"awards": [
{
"name": "Awesome Dude Of The Year",
"date_awarded": 2007,
"url": null
}
]
},
"educational_background": {
"degree": "MSc CE/CS",
"primary_school": {
"id": "42_abcdef",
"name": "Carl-von-Ossietzky Universtät Schellenburg",
"degree": "MSc CE/CS",
"notes": null,
"subject": null,
"begin_date": "1998-08",
"end_date": "2005-02"
},
"schools": [
{
"id": "42_abcdef",
"name": "Carl-von-Ossietzky Universtät Schellenburg",
"degree": "MSc CE/CS",
"notes": null,
"subject": null,
"begin_date": "1998-08",
"end_date": "2005-02"
}
],
"qualifications": [
"TOEFLS",
"PADI AOWD"
]
}
}
]
}我不确定是否正确理解您想要创建的格式,但我可以提供两条线索供您开始探索: 使用填充 OpenRefine让您可以轻松地使用,因此存储在顶级主控行中的信息将与每条记录一起携带到多行中。填写完所需字段后,例如用户(id),返回行模式,并通过使用facet,在数据库的每个表中只导出所需行的子集 模板导出 允许您以XML/JSON格式导出数据,以便可以嵌套元素。但是,此功能不支持一对多关系
让我们知道这是否有帮助。您应该能够导入JSON,使用gui,在用户{}对象下选择(而不是在用户对象本身上),这样您就有了一些相当干净的“记录”行,这些行也保存了每个记录行的标题信息,例如“专业体验”等 下载并导入此项目和示例数据…确保将网格视图更改为记录模式。(网格左上角) 显示作为记录行导入的JSON的OpenRefine项目示例: 从那里,您可以按照自己的意愿导出和更改模板,甚至只选择“专业经验”行(如果需要)和用户id
如果您需要批量导入JSON记录行,或者从数据端点或web服务导入JSON记录行,那么我建议您下载并使用Pentaho或Talend ETL的社区版本来处理此问题……但是您当然可以使用OpenRefine进行初始检查和对齐。(我更喜欢Pentaho,它在转换中具有出色的记录行实时右键预览功能,Martin更喜欢Talend)。非常感谢您的回复!Pentaho和Talend真的很有用,但是我不太明白如何使用它们解决我的问题。我现在正在做的是编写一个VBA脚本来“规范化”数据!然而,我非常感兴趣的是,是否有一种工具可以提供从JSON到关系模型的开箱即用转换。准确地说:我有这些数组字段,它们在refine中作为新行添加,但是从语义角度来看,这没有任何意义,因为例如,学校和雇主被放在一个“额外的行”中,尽管它们只与用户相关,而与其他人无关……是的,这就是您可以使用Pentaho和Talend的原因。接受一些培训或在他们的论坛上提问。没有免费的比萨饼。祝你好运。非常感谢你的回复!我在《泰德邮报》下发表了评论。我的问题实际上是数组数据被放入新行(在记录集中),然后“模仿”语义上不存在的关系(例如学校和雇主之间)。我需要的是转换到一个类似关系的模型,该模型将这些数组项连接到用户(id),而不是通过将它们放在行中彼此连接。如果你们有什么建议,那就太好了。同时,我将尝试使用VBA/Excel处理它。但由于这不会是我最后一次需要做这件事,所以我编辑了我的答案,并提供了更多细节。如果这有帮助,请告诉我