我知道这个问题已经被问过很多次了。我尝试了几种解决方案,但无法解决我的问题。
我有一个大的嵌套 JSON 文件 (1.4GB),我想把它弄平,然后将其转换为 CSV 文件。
JSON 结构是这样的:
{
"company_number": "12345678",
"data": {
"address": {
"address_line_1": "Address 1",
"locality": "Henley-On-Thames",
"postal_code": "RG9 1DP",
"premises": "161",
"region": "Oxfordshire"
},
"country_of_residence": "England",
"date_of_birth": {
"month": 2,
"year": 1977
},
"etag": "26281dhge33b22df2359sd6afsff2cb8cf62bb4a7f00",
"kind": "individual-person-with-significant-control",
"links": {
"self": "/company/12345678/persons-with-significant-control/individual/bIhuKnFctSnjrDjUG8n3NgOrl"
},
"name": "John M Smith",
"name_elements": {
"forename": "John",
"middle_name": "M",
"surname": "Smith",
"title": "Mrs"
},
"nationality": "Vietnamese",
"natures_of_control": [
"ownership-of-shares-50-to-75-percent"
],
"notified_on": "2016-04-06"
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这很容易用pandas模块完成,但我不熟悉它。
已编辑
所需的输出应该是这样的:
company_number, address_line_1, locality, …Run Code Online (Sandbox Code Playgroud) 我的Neo4j数据库包含家谱关系.
我想以嵌套的JSON格式提取数据,如下所示:
{
"firstname":"Jon",
"lastname":"Smith",
"parents":[
{
"firstname":"Anna",
"lastname":"Smith",
"parents":[
{
"furstname":"Peter",
"lastname":"Doe",
"parents":[
{
"firstname":"Jessica",
"lastname":"Doe"
},
{
"firstname":"Clayton",
"lastname":"Doe"
}
]
},
{
"firstname":"Nell",
"lastname":"Gordon",
"parents":[
{
"firstname":"Jessica",
"lastname":"Roberts"
},
{
"firstname":"Randy",
"lastname":"Roberts"
}
]
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
为了形象化它.
我尝试了以下查询:
MATCH path = (p:Person)-[r:PARENT_OF*1..3]-(k:Person)
WHERE k.id = '1887'
UNWIND r as rel
RETURN StartNode(rel).firstname, rels(path), EndNode(rel).firstname
Run Code Online (Sandbox Code Playgroud)
与py2neo库一样:
dumps(graph.run(query).data())
Run Code Online (Sandbox Code Playgroud)
但是JSON并没有像我想要的那样嵌套.
是否有一个查询可以帮助我实现这一点,或者我应该用其他编程语言进行嵌套?
我正在尝试使用Hibernate和Jersey保存实体.
我尝试发送的JSON是:
{
"firstname":"Jon",
"middlename":"J",
"lastname":"Smith",
"dob":"10-10-1990",
"gender":"male"
}
Run Code Online (Sandbox Code Playgroud)
当我用Postman发送它时,我得到Status: 200 OK但是记录没有保存在数据库中.
我使用的数据库是Neo4j.
这是我的PersonDAO班级:
package com.Neo4jRestAPI;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import org.hibernate.HibernateException;
import com.google.gson.Gson;
public class PersonDAO {
public void addPerson(Person person){
try {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistence");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
Person p = new Person();
p.setFirstname(person.getFirstname());
p.setMiddlename(person.getMiddlename());
p.setLastname(person.getLastname());
p.setDob(person.getDob());
p.setGender(person.getGender());
em.persist(p);
em.flush();
tx.commit();
em.clear();
em.close();
emf.close();
}
catch ( Exception e ) { …Run Code Online (Sandbox Code Playgroud) 我知道这个问题之前已被问过几次,但答案并没有解决我的问题.我正在尝试执行此查询:
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM
'file:///C:/Users/Zona5/Documents/Neo4j/checkIntel/import/personaldata.csv' AS line1
MERGE (a:Address1 {address_name1:line1.address1})
Run Code Online (Sandbox Code Playgroud)
但是我得到了错误:Cannot merge node using null property value for address_name1.
其他人建议使用:
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM
'file:///C:/Users/Zona5/Documents/Neo4j/checkIntel/import/personaldata.csv' AS line1
MERGE (a:Address1)
ON CREATE SET a.address_name1=line1.address1
ON MATCH SET a.address_name1=line1.address1
Run Code Online (Sandbox Code Playgroud)
但是,如果节点具有多个属性,则此解决方案有效.就我而言,它只有address_name1财产.
有没有办法解决这个问题,比如在查询MERGE或其他解决方案之前用查询中的单词替换空值?