Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.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存储类型信息以及toBytes中的Byte[]数组_Java_Json_Encoding - Fatal编程技术网

Java存储类型信息以及toBytes中的Byte[]数组

Java存储类型信息以及toBytes中的Byte[]数组,java,json,encoding,Java,Json,Encoding,我将JSON信息存储在数据库中,我希望在存储之前将所有值转换为字节,但保留类型信息 对于String、Integer和Boolean类型,我想说: Byte[] bytes = toBytes(myStr); // Not too sure about this part... // Want type information to be retrieved somehow. String s = fromBytes(bytes); 在Java中实现这一点的最佳方法是什么 问题包括将包含任

我将JSON信息存储在数据库中,我希望在存储之前将所有值转换为字节,但保留类型信息

对于String、Integer和Boolean类型,我想说:

Byte[] bytes = toBytes(myStr);

// Not too sure about this part... 
// Want type information to be retrieved somehow.
String s = fromBytes(bytes);
在Java中实现这一点的最佳方法是什么


问题包括将包含任意内容的字符串序列化为字节数组。我的问题涉及如何在没有loisng类型信息的情况下序列化任意JSON类型

一种方法是在字符串末尾附加一个字符,作为类型的“代码”

例如,您可以为
String
添加
s
i
Integer
f
Float
,等等

当您将其作为
字符串取消分析时,可以删除并检索最后一个字符,然后相应地将其更改为正确的形式

例如:

// encoding
Byte[] bytes = toBytes(myStr + "s");

// decoding
String s = fromBytes(bytes);
String type = s.substring(s.length()-2);
s = s.substring(0, s.length()-1);
switch(s) {
    case "s":
        // leave it as is - already a string
        break;
    case "i":
        // convert it to integer
        // ... and so on
}

一种方法是在字符串末尾附加一个字符,作为类型的“代码”

例如,您可以为
String
添加
s
i
Integer
f
Float
,等等

当您将其作为
字符串取消分析时,可以删除并检索最后一个字符,然后相应地将其更改为正确的形式

例如:

// encoding
Byte[] bytes = toBytes(myStr + "s");

// decoding
String s = fromBytes(bytes);
String type = s.substring(s.length()-2);
s = s.substring(0, s.length()-1);
switch(s) {
    case "s":
        // leave it as is - already a string
        break;
    case "i":
        // convert it to integer
        // ... and so on
}

我认为必须在JSON中添加一个对象字段来标识类型。例如,“type”:“integer”或“type”:“String”等


我看不出其他方法。

我认为您必须在JSON中添加一个对象字段来标识类型。例如,“type”:“integer”或“type”:“String”等


我看不出另一种方法。

可能的复制品您看过gson库了吗?据我所知,这实际上不是询问如何将任意字符串反序列化为字节数组的重复。不过,欢迎你解释你为什么不这么想!看起来gson不会让我反序列化未知类型。所有调用都需要是from
gson.fromJson(“1”,int.class)。来自gson文档:“但是,使用fromJson(json,Collection.class)进行反序列化将不起作用,因为gson无法知道如何将输入映射到类型。gson要求您在fromJson中提供集合类型的泛型版本。”可能的副本您看过gson库了吗?据我所知,这实际上不是询问如何将任意字符串反序列化为字节数组的重复。不过,欢迎你解释你为什么不这么想!看起来gson不会让我反序列化未知类型。所有调用都需要是from
gson.fromJson(“1”,int.class)。来自gson文档:“但是,使用fromJson(json,Collection.class)反序列化将无法工作,因为gson无法知道如何将输入映射到类型。gson要求您在fromJson中提供集合类型的泛型版本。”@EleazarEnrique,但这是一个容易逆转的操作,您不必在JSON中添加另一个字段。@EleazarEnrique但这是一个容易可逆的操作,您不必在JSON中添加另一个字段。JSON中没有“标记”,只有对象字段。JSON中没有“标记”,只有对象字段。