如何修改一个大的jsonstring?

死一般的寂静! 不是你经常在Stackoverflow上遇到的…我已经添加了一个小的奖金,让事情发展!

我已经build立了一个包含各国位置信息的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文件中的正确键相匹配。 有没有可以使用的程序? 另一个select是java的json库,它以某种方式支持我想要的。 我还没有find一个简单的解决scheme呢。 该文件是相当大的〜10MB,如果有任何区别!

编辑:我用QGIS来处理.shp文件,所以也可以使用某种扩展。

只需将JSON和CSV转换为完整的Java对象即可。 通过这种方式,您可以根据自己的喜好编写任何Java逻辑,以根据这个或那个更改Java对象。 最后将表示JSON数据的修改的Java对象转换回JSONstring。

然而,在你的JSON中有一个问题。 /banned/censored是不是一个JSON字段名称的有效字符,所以许多现有的JSON解串器可能会窒息这一点。 如果你解决这个问题,那么你就可以使用其中的一个。

我可以推荐使用Google Gson进行JSON和Java之间的转换。 这里是一个基于你的JSON结构的开球的例子( banned/censored改名为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; } 

你只需要自己添加/生成getters和setter。 然后,你可以像下面这样在JSON和Java之间进行转换:

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

要在CSV和Java对象之间进行转换,只需select许多CSVparsing器之一,如OpenCSV 。 你甚至可以在BufferedReader帮助下自己BufferedReader

最后,在更改表示JSON数据的Java对象之后,可以在Gson的帮助下将其转换回JSONstring,如下所示:

 String json = new Gson().toJson(data); 

虽然BalusC的回答告诉你如何在你当前的设置中做到这一点,但我有一个更激进的build议:摆脱JSON。

JSON并不是用来存储数据的 – 它的目的是作为一个“轻量级的基于文本的开放标准”,用于人类可读的数据交换。 那是:

  • 低stream量(尽可能less的无意义的数据)
  • 人类可读
  • 易于使用dynamic语言处理

数据存储另一方面比这个要求更多。 这就是数据库存在的原因。 因此,将您的存储移动到数据库。 如果你不想要一个全function的数据库,可以使用像HSQLDB或JavaDB这样的东西。