那么,当强制转换为json并将其存储在数据库中时,为什么要返回一个空的属性对象呢?
代码如下:
public class ParseGeojsonStream {
private static List<Feature> features = new ArrayList<Feature>();
public static List<Feature> parseJson(InputStream is) throws IOException {
// Create and configure an ObjectMapper instance
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
// Create a JsonParser instance
try (JsonParser jsonParser = mapper.getFactory().createParser(is)) {
// Check the first token
if (jsonParser.nextToken() != JsonToken.START_OBJECT) {
throw new IllegalStateException("Expected content to be an object");
}
JsonParser featureJson = findFeaturesToken(jsonParser);
if (featureJson == null) {
throw new IOException("Expected content to be not null");
}
if (featureJson.nextToken() != JsonToken.START_ARRAY) {
throw new IOException("Expected content to be an array");
}
// Iterate over the tokens until the end of the array
while (featureJson.nextToken() != JsonToken.END_ARRAY) {
// Read a contact instance using ObjectMapper and do something with it
Feature feature = mapper.readValue(featureJson, Feature.class);
features.add(feature);
}
return features;
}
}
private static JsonParser findFeaturesToken(JsonParser jsonParser) throws IOException {
JsonParser json = jsonParser;
while(json.nextToken() != JsonToken.END_OBJECT) {
String text = json.getText();
if ( text.equalsIgnoreCase(GEOJSONConstants.ApiJSON.FEATURES) ) {
return json;
}
}
return null;
}
}
@Data
public class Feature {
private Object properties;
private Object geometry;
}
public String createTable(final String name, final List<Feature> features) {
Gson gson = new Gson();
checkedNameTable= nameTable(name);
jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS " + checkedNameTable + " ( table_id SERIAL, properties jsonb not null, geom geometry(GeometryZ,4326), primary key (table_id));");
for (int i=0; i<1; i++ ) {
Object geometry = features.get(i).getGeometry();
Object property = features.get(i).getProperties();
log.info("property: " + property);
String jsonGeometry = gson.toJson(geometry);
String jsonProperty = gson.toJson(property);
log.info("jsonGeometry: " + jsonGeometry);
log.info("jsonProperty: " + jsonProperty);
String SQL = "INSERT INTO " + checkedNameTable + " ( properties, geom ) VALUES ( '" + property + "', ST_Force3D(ST_SetSRID(ST_GeomFromGeoJSON('" + geometry + "'), 4326) ));";
jdbcTemplate.batchUpdate(SQL);
}
return checkedNameTable;
}
log.info(“jsonGeometry:”+jsonGeometry)->显示:jsonGeometry:{“type”:“multipolygon”,“coordines”:[-3.691344883619331,40.424004164131894]}
log.info(“jsonProperty:”+jsonProperty)->shows:jsonProperty:{}
以下是Geojson的一部分:
{
"type": "FeatureCollection",
"features": [{
"type": "Feature",
"properties": {
"ELEMENTO": null
},
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[-3.721150157449075, 40.41560855514652],
[-3.721148651840721, 40.41557793380572],
[-3.721118017962975, 40.41557902578145],
[-3.721113597363736, 40.41549617019551],
[-3.7211442312040024, 40.415495078221284],
[-3.721143913813499, 40.41546535037238],
[-3.72119576233073, 40.41546412605902],
[-3.721195464155001, 40.41543619989809],
[-3.7213085995073105, 40.415434593222656],
[-3.7213088881096974, 40.41546161853896],
[-3.721313602485271, 40.415461589126885],
[-3.7213206932891425, 40.41546334669616],
[-3.721326615119707, 40.415466012462055],
[-3.7213313679771427, 40.41546958642474],
[-3.7213372994291647, 40.41547315303393],
[-3.721340883314031, 40.41547763519334],
[-3.7213444671993554, 40.41548211735267],
[-3.721346882111449, 40.415487507709095],
[-3.7213975616676365, 40.415487191502386],
[-3.721400871367978, 40.41557636033541],
[-3.7213490227697066, 40.41557758474146],
[-3.7213478922770142, 40.415582096314125],
[-3.721345583188133, 40.415586615240166],
[-3.721343274098946, 40.415591134166164],
[-3.7213397767926453, 40.415594759601625],
[-3.7213351008897226, 40.415598392390244],
[-3.721330415365877, 40.415601124334835],
[-3.7213245416249427, 40.41560296278854],
[-3.7213186678836525, 40.41560480124199],
[-3.721316310690866, 40.415604815948214],
[-3.7213165896778255, 40.41563094041987],
[-3.7211999566810587, 40.41563617253719],
[-3.7211996585017926, 40.41560824637715],
[-3.721150157449075, 40.41560855514652]
],
[
[-3.721260835104088, 40.41548714363045],
[-3.7212219511090683, 40.41548828710062],
[-3.7212160966125767, 40.415491927236594],
[-3.721188031570835, 40.41551282309202],
[-3.721190898542824, 40.41556055311452],
[-3.721222980337708, 40.41558467739598],
[-3.7212866245246525, 40.41558428036298],
[-3.7212912908093743, 40.41557974673244],
[-3.7213158296797295, 40.41555977375542],
[-3.72131649840387, 40.41551202167758],
[-3.721282040182673, 40.41548611043945],
[-3.721260835104088, 40.41548714363045]
]
]
]
}
}]
}
默认情况下GSON
不序列化null
值。由于“elemento”:null
,默认情况下它被排除在外。这就是空输出的原因。
若要强制序列化空值,请使用以下代码:
GsonBuilder builder = new GsonBuilder();
builder.serializeNulls();
Gson gson = builder.create();
String property = gson.toJson(property);
GSONBuilder
创建一个GSON
来序列化null值。
问题内容: 我有一个带有3个嵌套数组的简单php结构。 我不使用特定的对象,而是使用2个嵌套循环构建数组。 这是我要转换为Json的数组的var_dump的示例。 在另一个脚本中,我具有类似的结构并且工作正常。所以我不明白为什么在这里不起作用。 编辑:似乎有编码问题。当返回ASCII,该作品但当它返回UTF8,它不工作了。 Edit2:返回表示:格式错误的UTF-8字符,可能编码不正确。 问题答案
问题内容: 这可能是最简单的事情之一,但我看不到自己在做错什么。 我的输入包括一个带有数字的第一行(要读取的行数),一串包含数据的行和最后一行仅包含\ n的行。我应该处理此输入,并在最后一行之后做一些工作。 我有这个输入: 对于读取输入,我有以下代码。 我的问题是为什么我什么都不打印?程序读取第一行,然后不执行任何操作。 问题答案: 不读取以下换行符,因此第一个(返回 当前 行的其余部分 )将始终
可能只是我用错了,因为我对Kotlin和Moshi是新的。 为什么fromJson是null并且需要一个!!还是?。例如: 如果解析失败,缺少一个必需的字段,在我的例子中,它只会抛出一个异常。那么它如何解析一个“无效”的JSON响应而不失败,即返回null呢?
问题内容: 我有一个文件夹,其中包含index.js和几个模型(类)index.js book.js author.js 问题在于Author类似乎找不到书!它只是一个空对象。但是,如果我在index.js中切换导出,则将Book放在Author之后- 可以,但是其他模型将停止工作。 我不想做任何骇客工作。 问题答案: 这是因为您具有循环依赖关系。Node.js以非常特定的方式处理此问题: 第一个
问题内容: 我和我的同事有一个错误,这是由于我们假设会返回空流调用而导致的。 当然,假定和不阅读文档是我们的错。但是我不明白的是为什么空流的默认行为会返回。这是什么原因呢?像(相反地返回false)一样,此操作以命令式方式使用,它离开了monad,并且可能在语句中使用了。考虑到这些事实,是否有任何理由使大多数用途都需要默认为空流? 问题答案: 这就是所谓的虚无事实。空集合的所有成员都满足您的条件;
问题内容: 我有限的大脑无法理解为什么会这样: 在PHP中,等效比较返回false: 问题答案: 从文档中: 对于Unicode和字符串类型,当且仅当 x 是 y 的子字符串时,才为true 。等效测试为。注意, x 和 y 不必是同一类型;因此,将返回。 空字符串始终被视为任何其他字符串的子字符串,因此将返回。 通过查看呼叫,您正在使用2.x。 要更深入,请看一下字节码: 是我们进行布尔运算并查