死寂!您经常不会在Stackoverflow上体验到这一点...我已经添加了一笔不小的奖金来推动工作!
我已经构建了一个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文件,因此也可以使用某种扩展名。
答案 0 :(得分:7)
只需将JSON和CSV转换为完整的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字符串,如下所示:
String json = new Gson().toJson(data);
答案 1 :(得分:3)
虽然BalusC的回答告诉你如何在当前的设置中做到这一点,但我有一个更激进的建议:摆脱JSON。
根据想法,JSON并不意味着存储数据 - 它旨在用作“基于文本的轻量级开放标准,专为人类可读的数据交换而设计”。那就是:
另一方面,数据存储要求比这更多。这就是数据库存在的原因。因此,将存储移动到数据库。如果您不想使用功能齐全的数据库,请使用HSQLDB或JavaDB等。