如何将DataFrame生成的资助数据改为无命名对象序列用于JSON序列化?
问题:将Julia生成的带数字键的资助Dict转为JSON数组
我有一个Julia函数getgrants,接收DataFrame作为输入,生成嵌套Dict来表示一系列资助信息,最终要把这个Dict嵌套进更大的层级里生成JSON文件。但目前序列化后的JSON里,资助项带了不必要的数字枚举键,我想改成无命名对象序列(也就是JSON数组),有没有简便的实现方法?
原函数代码
function getgrants(Grantrows) if nrow(Grantrows)==0 return nothing end Grants = Dict() let j = 0 for GCSGrants in eachrow(Grantrows) j += 1 Grants[j] = Dict( "GrantID" => GCSGrants.Grant_ID, "GrantDate" => GCSGrants.Grant_Date, "GrantAmount" => GCSGrants.Grant_Amount, "GrantTitle" => GCSGrants.Grant_Title, "GrantDistributor" => GCSGrants.Grant_Distributor, ) end end return Grants end
当前序列化后的JSON片段
"Grants": { "1": { "GrantTitle": "Recipient 1", "GrantDate": "2022-03-16", "GrantAmount": 600000, "GrantDistributor": "Distributor 1", "GrantID": "ID789" }, "2": { "GrantTitle": "Recipient 2", "GrantDate": "2020-09-02", "GrantAmount": 250000, "GrantDistributor": "Distributor 2", "GrantID": "ID456" }, "3": { "GrantTitle": "Recipient 3", "GrantDate": "2020-06-25", "GrantAmount": 448770, "GrantDistributor": "Distributor 3", "GrantID": "ID123" } }
解决方法
核心就是把原来存资助项的Dict换成Julia的Vector(数组)——因为JSON的数组对应Julia的Vector,序列化后自然就是无键的对象序列。
修改后的函数代码:
function getgrants(Grantrows) Grants = Vector{Dict}() for GCSGrants in eachrow(Grantrows) push!(Grants, Dict( "GrantID" => GCSGrants.Grant_ID, "GrantDate" => GCSGrants.Grant_Date, "GrantAmount" => GCSGrants.Grant_Amount, "GrantTitle" => GCSGrants.Grant_Title, "GrantDistributor" => GCSGrants.Grant_Distributor, )) end # 如果空数据时要返回空数组而非nothing,直接返回Grants即可;要是想保持返回nothing,加个判断: # isempty(Grants) ? nothing : Grants return Grants end
修改后的JSON效果
序列化后会变成标准的JSON数组结构:
"Grants": [ { "GrantTitle": "Recipient 1", "GrantDate": "2022-03-16", "GrantAmount": 600000, "GrantDistributor": "Distributor 1", "GrantID": "ID789" }, { "GrantTitle": "Recipient 2", "GrantDate": "2020-09-02", "GrantAmount": 250000, "GrantDistributor": "Distributor 2", "GrantID": "ID456" }, { "GrantTitle": "Recipient 3", "GrantDate": "2020-06-25", "GrantAmount": 448770, "GrantDistributor": "Distributor 3", "GrantID": "ID123" } ]
内容的提问来源于stack exchange,提问作者Tim Gebbels
相关产品推荐
相关产品推荐

