2017-07-27 24 views
-2

我有一個JSON文件如何向現有的JSON文件添加新值?

{ 
    "titlename": "periodic", 
    "atom": [ 
    { 
     "usage": "neutron", 
     "dailydata": [ 
     { 
      "utcacquisitiontime": "2017-03-27T22:00:00Z", 
      "datatimezone": "+02:00", 
      "intervalvalue": 28128, 
      "intervaltime": 15 
     }, 
     { 
      "utcacquisitiontime": "2017-03-27T22:15:00Z", 
      "datatimezone": "+02:00", 
      "intervalvalue": 25687, 
      "intervaltime": 15 
     } 
     ] 
    } 
    ] 
} 

我要追加

"matter":[ 
    { 
    "usage":"neutron", 
    "intervalvalue":345678 
    }, 
    ... 
] 

intervalvalue,我需要放置的intervalvalues總值在dailydata對每一種使用。我正在使用scala,並且能夠讀取json文件。請幫我彙總和追加!

+0

不應該你的值是'28128 + 25687 = 53815'。而你的問題對我來說似乎還不清楚,你想在日常數據使用中追加「物質」?預期產出本身不只是其中的一部分? – prayagupd

+0

我需要的JSON等 ' 「TITLENAME」: 「週期性」, 「物質」:[ { 「使用」: 「中子」, 「intervalvalue」:345678 }, 「原子」:[ { 「使用」: 「中子」, 「dailydata」:[{ 「utcacquisitiontime」: 「2017-03-27T22:00:00Z」, 「datatimezone」: 「02:00」, 「intervalvalue 「:28128, 」intervaltime「:15 }, { 」utcacquisitiontime「:」2017-03-27T22:15:00Z「, 「datatimezone」: 「+02:00」, 「intervalvalue」:25687, 「intervaltime」:15 } ] } ] }]' – Ninja

回答

1

你應該用數據幀去獲得所需的JSON要追加

爲你將不得不JSON文件轉換成數據幀這是可以做到

val json = sc.wholeTextFiles("path to the json file") 
    .map(tuple => tuple._2.replace("\n", "").trim) 

val df = sqlContext.read.json(json) 

這會給你的輸出作爲

+--------------------------------------------------------------------------------------------------------+---------+ 
|atom                         |titlename| 
+--------------------------------------------------------------------------------------------------------+---------+ 
|[[WrappedArray([+02:00,15,28128,2017-03-27T22:00:00Z], [+02:00,15,25687,2017-03-27T22:15:00Z]),neutron]]|periodic | 
+--------------------------------------------------------------------------------------------------------+---------+ 

你應該從中提取其可以做到

數據框使用和intervalue
import org.apache.spark.sql.functions._ 
val tobemergedDF = df.withColumn("atom", explode(col("atom"))) 
    .withColumn("usage", col("atom.usage")) 
    .withColumn("atom", explode(col("atom.dailydata"))) 
    .withColumn("intervalvalue", col("atom.intervalvalue")) 
    .groupBy("usage").agg(sum("intervalvalue").as("intervalvalue")) 

tobemergedDF是

+-------+-------------+ 
|usage |intervalvalue| 
+-------+-------------+ 
|neutron|53815  | 
+-------+-------------+ 

現在你可以只寫數據幀作爲JSON和合並兩個文件。

希望答案有幫助

+0

感謝您的幫助! – Ninja

+0

我的榮幸@Ninja :)感謝您的接受和upvote :) –

+0

感謝您的幫助到目前爲止!但會幫助我將新值鏈接到原始json的根目錄中!我無法將'tobemergedDF'合併到原始json的根目錄下。任何幫助應該高度appriciated。我對這個環境很陌生。 – Ninja