例如,我們從我們的合作伙伴那里收到一條這樣的 json 訊息:
{
"message": "Dear client,\nWe'd like to offer you.."
}
合作伙伴希望客戶端收到這樣的訊息(沒有換行符,但有\n)
Dear client,\nWe'd like to offer you
但是我們的生態系統中有一系列微服務,并且 json 會經過 4 或 5 個微服務,這些微服務會在客戶端獲取它之前對其進行處理。所以,我們的合作伙伴應該給我們\\\\\\\\n而不是\n為了客戶得到\n結果。但我想知道,在源訊息中添加 8 個反斜杠來轉義\n每個微服務的“ ”是解決這個問題的唯一方法。我認為這不是一個很好的解決方案,因為如果鏈中微服務的數量發生變化,我們必須在源訊息中進行更改(此外,如果鏈中的微服務數量開始動態變化,我們將面臨問題)?有一種使用方式\n中(來自合作伙伴)源訊息,而無需更換每一個\n與\\n我們microservies?
有一個示例,我如何在其中一個微服務中處理 json:
private String replace(String sourceJson, List<String> properties, DocumentContext context) {
StringBuilder stringBuilder = new StringBuilder(sourceJson);
for (String property : properties) {
String newValue = Pattern.compile("ABC")
.matcher(stringBuilder)
.replaceAll(context.read(property, String.class));
stringBuilder.replace(0, stringBuilder.length(), newValue);
}
return stringBuilder.toString();
}
uj5u.com熱心網友回復:
這是一個創建 JSON 物件的示例,將其轉換為 String,然后再轉換回 JsonObject,添加屬性,然后再次將其轉換回 String。
package org.example;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
public class App {
public static void main(String[] args) {
JsonObject o = new JsonObject();
o.addProperty("message","foo\nbar");
Gson gson = new Gson();
String stringRep = gson.toJson(o);
System.out.println(stringRep);
JsonObject o2 = gson.fromJson(stringRep, JsonObject.class);
o2.addProperty("newProp", 42);
String messageValue = o2.get("message").getAsString();
System.out.println(messageValue);
String newMessageValue = messageValue.replace("foo", "baz");
o2.addProperty("message", newMessageValue);
stringRep = gson.toJson(o2);
System.out.println(stringRep);
}
}
這個程式的輸出是:
{"message":"foo\nbar"}
foo
bar
{"message":"baz\nbar","newProp":42}
所以你可以看到字串的 Java 表示包含換行符,但 JSON 表示包含字符序列'\', 'n'。
您需要的 Maven 依賴項是:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.9</version>
</dependency>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/393388.html
