如果类的属性需要中文名怎么办

类中的属性是坚决不建议出现中文命名的(原因主要为,中文命名的属性在碰到乱码问题时,程序可能会崩掉)。

但是,如果上游传来的json字符串中有中文的key,在转换成Object的时候,不可避免地需要中文命名的属性,怎么办?

JSON串:

{
"sofa调用结果": "id",
"更多trace信息": {
"测试一下": "test"
}
}

反例(简化下,getter 和 setter 就不写了):

public class TestOut {
private String sofa调用结果;
private TestOrTest 更多trace信息;
}

public class TestOrTest {
private String 测试一下;
}

测试:

import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;

public class Test {
public static void main(String[] args) {
String testStr = "{"sofa调用结果":"id","更多trace信息":{"测试一下":"test"}}";
TestOut testOut = JSONObject.parseObject(testStr, new TypeReference() {
});
System.out.println(JSONObject.toJSONString(testOut));
}
}

结果:

image.png

如上例一般,虽然能跑通,但极不合规;

参考了 属性重命名 @SerializedName 之后,改为如下(包含两个改动点,Bean中的属性需要加上注释,在对JosnStr进行解析的时候需要使用特定的解析方式)

JSON串(不变):

{
"sofa调用结果": "id",
"更多trace信息": {
"测试一下": "test"
}
}

正例(简化下,getter 和 setter 就不写了):

public class TestOut {
@SerializedName("sofa调用结果")
private String id;
@SerializedName("更多trace信息")
private TestOrTest moreInformation;
}

public class TestOrTest {
@SerializedName("测试一下")
private String test;
}

测试:

import com.google.gson.Gson;

public class Test {
public static void main(String[] args) {
String testStr = "{"sofa调用结果":"id","更多trace信息":{"测试一下":"test"}}";
Gson gson = new Gson();
TestOut testOut = gson.fromJson(testStr, TestOut.class);
System.out.println(testOut.toString());
}
}

结果:

image.png

That's it.

你可能感兴趣的:(如果类的属性需要中文名怎么办)