2010-08-05 78 views
5

沉默的沉默!通常你不會在Stackoverflow上遇到這種情況......我已經添加了一個小小的獎勵來讓事情發展!如何修改大型json字符串?

我已經建立了包含有關各國的位置信息的JSON文檔。我已經添加了一些自定義鍵。這是JSON文件的開頭:

{ 
    "type": "FeatureCollection", 
    "features": [ 
     { "type": "Feature", "properties": { 
      "NAME": "Antigua and Barbuda", 
      "banned/censored": "AG", 
      "Bombed": 29, 
      "LON": -61.783000, "LAT": 17.078000 }, 
    "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -61.686668,... 

所有的自定義鍵(如轟炸,禁止/審查等)有值,但(如果你要假的),他們只是舊值。實際值保存在從excel文檔中提取的.csv文件中。

例如,有這個:

      banned/censored  bombed 
Antigua and Barbuda    2     120 
... 

現在我想匹配這些值與正確的鍵在json文件。有沒有我可以使用的任何程序?另一種選擇是java的json庫,它以某種方式支持我想要的。我還沒有找到一個簡單的解決方案呢。該文件相當大〜10MB,如果它有任何區別!

編輯:我用QGIS操縱.shp文件,因此某種延伸的可能是使用過。

回答

7

只是轉換既JSON和CSV到fullworthy Java對象。通過這種方式,您可以根據自己的喜好編寫任何Java邏輯,以根據這些或那個來更改Java對象。最後將表示JSON數據的修改後的Java對象轉換回JSON字符串。

然而有你的JSON的一個問題。 banned/censored中的/不是JSON字段名稱的有效字符,因此許多現有的JSON解串器可能會對此扼殺。如果你解決這個問題,那麼你就可以使用其中的一個。

我可以推薦使用Google Gson對JSON和Java之間的轉換。以下是根據您的JSON結構的開球例子(與banned/censored更名爲bannedOrCensored):

class Data { 
    private String type; 
    private List<Feature> features; 
} 

class Feature { 
    private String type; 
    private Properties properties; 
    private Geometry geometry; 
} 

class Properties { 
    private String NAME; 
    private String bannedOrCensored; 
    private Integer Bombed; 
    private Double LON; 
    private Double LAT; 
} 

class Geometry { 
    private String type; 
    private Double[][][][] coordinates; 
} 

你只需要添加/生成getter和setter自己。然後,您就可以與JSON和Java喜歡轉換如下:

Data data = new Gson().fromJson(jsonString, Data.class); 

爲CSV和Java對象之間的轉換,只需選擇衆多CSV解析器之一,像OpenCSV。你甚至可以在BufferedReader的幫助下自己生長。

最後,改變代表JSON數據的Java對象後,你可以用GSON的幫助如下轉換回JSON字符串:

​​
+0

這是我希望避免的。無論如何,我會試試看。謝謝! – 2010-08-09 08:04:55

+0

你有什麼想法?有些魔力? – BalusC 2010-08-09 11:32:32

+2

支持我正在尋找的一些功能的程序。就像QGIS的擴展一樣,或者像魔術一樣。 無論如何,你有事情要做。 – 2010-08-10 12:15:42

3

雖然BalusC的答案告訴你如何做到這一點在當前的設置,我有一個更激進的建議:擺脫JSON。

通過JSON的想法並不意味着存儲數據 - 這意味着作爲一個「輕量級的基於文本的開放標準設計的人類可讀數據交換」。那就是:

  • 低流量(如小非有意義的數據越好)
  • 人類可讀
  • 容易與動態語言

,另一方面數據存儲器必須處理比這更多的要求。這就是數據庫存在的原因。因此,將存儲移動到數據庫。如果你不想要一個全功能的數據庫,可以使用類似HSQLDB或JavaDB的東西。

+0

你說得對。我不喜歡JSON來存儲數據。但是當我使用OpenLayers和.shp文件時,我認爲這是最簡單的使用格式,因爲OpenLayers使用geojson,.shp文件可以通過gdal轉換爲geojson。 – 2010-08-10 12:20:28