Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将节俭对象转换为可读字符串并将其转换回?_Java_Json_Thrift_Thrift Protocol - Fatal编程技术网

Java 如何将节俭对象转换为可读字符串并将其转换回?

Java 如何将节俭对象转换为可读字符串并将其转换回?,java,json,thrift,thrift-protocol,Java,Json,Thrift,Thrift Protocol,有时,我们需要在单元测试中创建一些节约对象。我们可以使用Java代码手动创建对象,如: MyObj myObj = new MyObj(); myObj.setName("???"); myObj.setAge(111); 但这并不方便。我正在寻找一种方法来创建具有可读文本的对象 我们可以使用TSimpleJSONProtocol将thrift对象转换为JSON,并获得非常可读的JSON字符串,如: { "name": "???", "age": 111 } 但是问题是TSimpleJSON

有时,我们需要在单元测试中创建一些节约对象。我们可以使用Java代码手动创建对象,如:

MyObj myObj = new MyObj();
myObj.setName("???");
myObj.setAge(111);
但这并不方便。我正在寻找一种方法来创建具有可读文本的对象

我们可以使用
TSimpleJSONProtocol
将thrift对象转换为JSON,并获得非常可读的JSON字符串,如:

{ "name": "???", "age": 111 }
但是问题是
TSimpleJSONProtocol
是只写的,thrift无法读回它来构造
MyObj
的实例

虽然有一个
TJSONProtocol
支持序列化和反序列化,但生成的JSON不可读,它使用非常简化的JSON格式,并且缺少大多数字段名。不方便在测试中构造它


有没有办法将旧的对象转换成可读的字符串,也可以将其转换回来?如果
TSimpleJSONProtocol
支持向后转换,这正是我要寻找的

节俭的主要目标是提供高效的序列化和RPC机制。你想要的是——至少部分地——与之相反的东西。人类可读的数据结构和机器处理效率在很大程度上是相互冲突的目标,节俭倾向于后者而非前者

您已经了解了
TSimpleJson
TJson
协议以及它们的优缺点,因此没有太多的补充。唯一要说的是:Thrift的协议/传输堆栈非常简单

这种简单性使得根据您的特定需求添加另一个协议成为可能,而无需进行大量或过于复杂的工作。甚至可以在短时间内编写一个XML协议(如果有人真的想要这样的膨胀软件的话)


唯一需要注意的是,Thrift需要字段ID来反序列化数据,尤其是针对您的具体情况。因此,您要么需要将它们存储在数据中,要么需要一些其他机制,能够根据字段和结构名称检索该字段ID。

也许最好的方法仍然是使用代码和构造函数构造对象。至少我们有类型安全