在java中将JSON类型转换为字节数组格式
当我想在UDP协议中使用字节格式发送数据时,我遇到了一个问题,问题是当我尝试创建json对象类型的数据时,我无法获取数据的字节格式这是我的示例代码:在java中将JSON类型转换为字节数组格式,java,json,byte,Java,Json,Byte,当我想在UDP协议中使用字节格式发送数据时,我遇到了一个问题,问题是当我尝试创建json对象类型的数据时,我无法获取数据的字节格式这是我的示例代码: JSONObject obj = new JSONObject(); obj.put("name", "foo"); obj.put("num", new Integer(100)); obj.put("balance", new Double(1000.21)); obj.put("is_vip", new
JSONObject obj = new JSONObject();
obj.put("name", "foo");
obj.put("num", new Integer(100));
obj.put("balance", new Double(1000.21));
obj.put("is_vip", new Boolean(true));
obj.put("nickname",null);
sendData = obj.getBytes(); //this is error because not have methos getBytes();
我知道我的问题,但我找不到如何将json对象转换为字节,有什么建议吗 获取字符串的字节数:
obj.toString().getBytes(theCharset);
假设您提到的JSONObject来自,您可以得到如下字节
sendData = obj.toString().getBytes("utf-8");
为了避免从
String
到byte[]
的不必要的转换,这会强制基于提供的字符集进行编码,我更喜欢直接使用JsonWriter
和ByteArrayOutputStream
(JsonValue
子类型使用JsonWriter
和StringWriter
):
此外,还可以按如下方式启用漂亮打印:
Json.createWriterFactory(
Collections.singletonMap(JsonGenerator.PRETTY_PRINTING, true))
.createWriter(stream)
.write(obj);
唯一可悲的是,它不是一行。您至少需要3个(考虑到您忽略了调用
JsonWriter.close()
,这在本上下文中是不必要的)。使用jackson-databind
项目的ObjectMapper
中的实用程序类,即ObjectMapper.writeValueAsBytes(dto)
返回字节[]
@Autowired
private ObjectMapper objectMapper;
ContractFilterDTO filter = new ContractFilterDTO();
mockMvc.perform(post("/api/customer/{ico}", "44077866")
.contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)
.content(objectMapper.writeValueAsBytes(filter)))...
Maven依赖项:
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.8.1</version>
</dependency>
com.fasterxml.jackson.core
杰克逊数据绑定
2.8.8.1
getBytes
应该传递一个编码。否则。。。如果不是假定的“默认编码”,那就没什么意思了。请查看下面的回答,了解如何避免不必要地转换为字符串,以及基于提供的字符集的附加编码:JSONObject和a字符串都是不同的数据表示形式。我们在记事本中看到的是JSON数据的字符串表示,而不是实际数据。例如,如果你在记事本中看到一个int值65535,这实际上是一个由6、5、5、3和5个字符组成的字符串(java中5个字符=5*2字节=10字节),而不是一个int值65535(java中为4字节)。是的,你也是对的…:)所以我在每个答案中都放弃了一些…:@Agung链接不再有效,你能告诉我这有什么用吗?哦!知道objectMapper后,我错过了使用它…,不过我已经更新了代码。谢谢.Json.createWriter(stream.write(obj);上面的行只接受Javax.json类型的obj,而不接受JSONObject(问题中提到)。如果您尝试像这样强制转换它:Json.createWriter(stream.write((JSONObject)obj);它抛出异常:无法强制转换。对JSONObject类型对象的任何建议。
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.8.1</version>
</dependency>