gpt4 book ai didi

java - 通过 Flex JSON 转义非 ascii 符号

转载 作者:行者123 更新时间:2023-11-30 03:27:15 35 4
gpt4 key购买 nike

我有一个java类,其中包含简单的String字段,其中一些字段可以包含非ascii符号,并且在JSON中序列化期间,这些符号将被转换为\u0000.我知道 jackson 可以做到,但由于内部原因无法使用。

如前所述。 Java类

public class SomeClass {
String filed1;

// getter/setter
}

转换后的代码:

public String convert(SomeClass someClass) {
new JSONSerializer().include( "*" ).serialize(someClass);
}

结果应该是 JSON:

{fild1:'\u041F\u0440\u0438\u0432\u0435\u0442'}

而不是

{fild1:'Пример'}

最佳答案

好的,我已经找到解决方案了。可能这对某人有帮助。

JSONSerializer serializer = new JSONSerializer().transform( new AbstractTransformer() {
@Override
public void transform(Object object) {

String value = object.toString();
int len = value.length();
StringBuilder stringBuilder = new StringBuilder("\"");
for (int i = 0; i < len; i++) {
char c = value.charAt( i );
if (c == '"') {
stringBuilder.append( "\\u0022" );
} else if (c == '&') {
stringBuilder.append( "\\u0026" );
} else if (c == '\'') {
stringBuilder.append( "\\u0027" );
} else if (c == '\\') {
stringBuilder.append( "\\\\" );
} else if (c == '\b') {
stringBuilder.append( "\\b" );
} else if (c == '\f') {
stringBuilder.append( "\\f" );
} else if (c == '\n') {
stringBuilder.append( "\\n" );
} else if (c == '\r') {
stringBuilder.append( "\\r" );
} else if (c == '\t') {
stringBuilder.append( "\\t" );
} else if (c > 127) {
stringBuilder.append( "\\u" );
int n = c;
for (int j = 0; j < 4; ++j) {
int digit = (n & 0xf000) >> 12;
stringBuilder.append( String.valueOf( JSONSerializer.HEX[digit] ) );
n <<= 4;
}
} else {
stringBuilder.append( c );
}
}
stringBuilder.append( "\"" );
getContext().write( stringBuilder.toString() );
}
}, String.class );

关于java - 通过 Flex JSON 转义非 ascii 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29896398/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com