[英]What is the correct way to handle large json strings in vert.x?
我有一個來自我需要使用的 HTTP API 的大(當前大小為 2MB,可能會增長到 10MB)JSON 對象(包含對象數組):
client.get(...)
.send(ar -> {
JsonObject jsonObject = new JsonObject(ar.result().bodyAsBuffer());
});
這會導致錯誤:
Jan 09, 2020 2:11:14 PM io.vertx.core.impl.ContextImpl
SEVERE: Unhandled exception
io.vertx.core.json.DecodeException: Failed to decode:Unexpected character (',' (code 44)): expected a value
at [Source: (io.netty.buffer.ByteBufInputStream); line: 70674, column: 27]
at io.vertx.core.json.Json.decodeValue(Json.java:222)
at io.vertx.core.json.JsonObject.fromBuffer(JsonObject.java:975)
at io.vertx.core.json.JsonObject.<init>(JsonObject.java:85)
我認為發生此錯誤是因為 JSON 字符串有多大,因為 Json 字符串似乎是有效的。 vert.x 中有沒有辦法處理大型 Json 字符串/文件? 或者這里還有其他事情嗎?
JSON 無效,但用於手動驗證 JSON 的工具沒有發現這一點。
錯誤與第三方 api 有關,當雙字段為空時,它會將鍵的值保留為空白而不是 null。
這個:
{
"String": "string",
"Double": ,
"AnotherDouble": 0.1
}
應該是這樣的:
{
"String": "string",
"Double": null,
"AnotherDouble": 0.1
}
修復是向修補問題的開發人員報告無效的 JSON,使空白值變為空而不是空白。
10 MB json 文件在移動設備上可能很大。
您應該在代碼中使用JsonArray
而不是JsonObject
:
JsonArray jsonArray = new JsonArray(ar.result().bodyAsBuffer())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.