簡體   English   中英

在 vert.x 中處理大型 json 字符串的正確方法是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM