Head's Up! These forums are read-only. All users and content have migrated. Please join us at community.neo4j.com.
03-31-2021 07:42 AM
Hello. I am trying to learn how to load a json file and create the nodes and relationships. My json file has ~500K messages with 5 lists each: frame, ip, upd, eth, and data. I have learned how to read in the json file and then create one (1) message in the DBMS with all the appropriate nodes and relationships (thanks to those who helped school me). Not I need to figure out how to go through the map and to that for all 500k messages. I tried a FOREACH, but it only creates the first message an nothing else. I don't know if I am using the FOREACH incorrectly or if I should be using something else. Here is the pertinent parts:
CALL apoc.load.json("file:///FileExample.json") YIELD value
UNWIND value._source.layers as bigData
//THIS OPENS THE FOREACH LOOP
FOREACH (data in bigData |
a bunch of merge and sets
)
How can I cycle through the 500K messages to get them in the DBMS?
Solved! Go to Solution.
04-02-2021 01:42 PM
I found the solution and I am posting it here to help others and close this out. I found an example in the book "Hands-On Graph Analytics with Neo4j" (I have no affiliation). Here is what worked to go through a nested JSON file and add it to the DBMS. I do have to add the other parts, but that is just like the example.
//Load JSON file
CALL apoc.load.json("file:///FileExample.json") YIELD value AS data
//Create top level object
CREATE (l:Layers {name: "FileExample"})
//Create ETH
CREATE (e:ETH {addr_oui: data._source.layers.eth.eth.dst_tree
.eh.addr.oui
,
addr: data._source.layers.eth.eth.dst_tree
.eh.addr
})
MERGE (l)-[:CONTAINS]-(e)
//Create UDP
CREATE (u:UDP {srcport: data._source.layers.udp.udp.srcport
})
MERGE (l)-[:CONTAINS]-(u)
//Create Data
CREATE (d:Data {len: data._source.layers.data.data.len
})
MERGE (l)-[:CONTAINS]-(d)
//Create Frame
CREATE (f:Frame {number: data._source.layers.frame.frame.number
})
MERGE (l)-[:CONTAINS]-(f)
03-31-2021 12:33 PM
Check these two links:
03-31-2021 12:37 PM
Yes, I have downloaded and installed JSON.
04-01-2021 06:06 AM
Yes, I do have to be careful about that. But the main problem is not being able to go through the data and pull the next message. My code goes through one, creates the nodes and relationships and that's it. How do I get it to continue through the list creating all 500K nodes?
04-02-2021 01:42 PM
I found the solution and I am posting it here to help others and close this out. I found an example in the book "Hands-On Graph Analytics with Neo4j" (I have no affiliation). Here is what worked to go through a nested JSON file and add it to the DBMS. I do have to add the other parts, but that is just like the example.
//Load JSON file
CALL apoc.load.json("file:///FileExample.json") YIELD value AS data
//Create top level object
CREATE (l:Layers {name: "FileExample"})
//Create ETH
CREATE (e:ETH {addr_oui: data._source.layers.eth.eth.dst_tree
.eh.addr.oui
,
addr: data._source.layers.eth.eth.dst_tree
.eh.addr
})
MERGE (l)-[:CONTAINS]-(e)
//Create UDP
CREATE (u:UDP {srcport: data._source.layers.udp.udp.srcport
})
MERGE (l)-[:CONTAINS]-(u)
//Create Data
CREATE (d:Data {len: data._source.layers.data.data.len
})
MERGE (l)-[:CONTAINS]-(d)
//Create Frame
CREATE (f:Frame {number: data._source.layers.frame.frame.number
})
MERGE (l)-[:CONTAINS]-(f)
04-02-2021 07:15 PM
Thanks for sharing this.
All the sessions of the conference are now available online