Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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 用protostuff反序列化数组_Java_Json_Serialization_Deserialization_Protostuff - Fatal编程技术网

Java 用protostuff反序列化数组

Java 用protostuff反序列化数组,java,json,serialization,deserialization,protostuff,Java,Json,Serialization,Deserialization,Protostuff,我试图使用protostuff序列化反序列化json,但当我序列化对象时,数组的大小放在前面 {"id":1,"price":1.2,"name":"alex","tags":{"a":3,"b":["tag1","tag2","tag2"]}} 如果我试图对同一个字符串进行理想化,它就像一个符咒,但我的数据中有“a”:3,“b”:对于标签来说,这很简单 {"id":1,"price":1.2,"name":"alex","tags":["tag1","tag2","tag2"]} {"id

我试图使用protostuff序列化反序列化json,但当我序列化对象时,数组的大小放在前面

{"id":1,"price":1.2,"name":"alex","tags":{"a":3,"b":["tag1","tag2","tag2"]}}
如果我试图对同一个字符串进行理想化,它就像一个符咒,但我的数据中有“a”:3,“b”:对于标签来说,这很简单

{"id":1,"price":1.2,"name":"alex","tags":["tag1","tag2","tag2"]}
{"id":1,"price":1.2,"name":"alex","tags":["tag1","tag2","tag2"]}
当我试图像上面那样对字符串进行理想化时,会抛出一个异常

 io.protostuff.JsonInputException: Expected token: { but was VALUE_STRING on tags of message java.lang.reflect.Array
使用的java代码:

String[] x = {"tag1", "tag2", "tag2"};
Product t = new Product(1, 1.2, "alex", x);
Path path = Paths.get("...");
byte[] as = Files.readAllBytes(path);
io.protostuff.Schema<Product> schema = RuntimeSchema.getSchema(Product.class);
LinkedBuffer buffer = LinkedBuffer.allocate(512);

byte[] protostuff;
try {
    protostuff = JsonIOUtil.toByteArray(t, schema, false , buffer);
} finally {
    buffer.clear();
}
// deser
Product f = schema.newMessage();
JsonIOUtil.mergeFrom(as, f, schema,false);
Protostuff用于序列化数组-出于性能原因,它将数组大小设置为序列化形式

您应该将
标记的字段类型更改为列表:

private List<String> tags;
Protostuff用于序列化数组-出于性能原因,它将数组大小设置为序列化形式

您应该将
标记的字段类型更改为列表:

private List<String> tags;