例如,我们从我们的合作伙伴那里得到了这样一条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
?
有一个例子是如何在其中一个微服务中处理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();
}
发布于 2021-12-23 12:04:24
下面是一个创建JSON对象的示例,将其转换为字符串,然后返回到JsonObject,添加一个属性,然后再将其转换为字符串。
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://stackoverflow.com/questions/70461516
复制相似问题