【问题标题】:Escape non-ascii symbols by Flex JSON通过 Flex JSON 转义非 ascii 符号
【发布时间】:2015-04-27 12:54:04
【问题描述】:

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

例如。 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:'Пример'}

【问题讨论】:

    标签: java json non-ascii-characters flexjson


    【解决方案1】:

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

    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 );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-12
      • 2013-08-31
      • 2011-01-01
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多