gpt4 book ai didi

java - MsgPack 在 Android 中序列化一个 JsonObject

转载 作者:行者123 更新时间:2023-11-30 10:40:45 27 4
gpt4 key购买 nike

我有一个包含多个 JsonArray 的 JsonObject:

{
"key1" : [[1, 2, 3, 4]],
"key2" : [[1, 2, 3, 4]]
}

我想使用 MessagePack 打包它而不使用 JsonObjects 字符串表示,

到目前为止,我还没有找到任何关于如何完成此操作的文档,

有什么想法吗?

最佳答案

为了实现这一点,我写了一个递归代码,

如果其他人遇到过这个问题,这里是代码:

public byte[] convert(JSONObject data) throws IOException, JSONException {
MessageBufferPacker packer = MessagePack.newDefaultBufferPacker();
packJObject(packer, data);
packer.close();
return packer.toByteArray();
}

private void packJObject(MessageBufferPacker packer, JSONObject data) throws IOException, JSONException {
packer.packMapHeader(data.length());
Iterator<String> keys = data.keys();
while(keys.hasNext()) {
String key = keys.next();
packer.packString(key); // pack the key
Object value = data.get(key);
if(value instanceof JSONArray) {
packJArray(packer, (JSONArray)value);
}
else if(value instanceof JSONObject) {
packJObject(packer, (JSONObject) value);
}
else {
packPrimitive(packer, value);
}
}
}

private void packJArray(MessageBufferPacker packer, JSONArray data) throws IOException, JSONException {
packer.packArrayHeader(data.length());
for(int i = 0; i < data.length(); i++) {
Object value = data.get(i);
if(value instanceof JSONObject) {
packJObject(packer,(JSONObject)value);
}
else if(value instanceof JSONArray){
packJArray(packer,(JSONArray)value);
}
else {
packPrimitive(packer, value);
}
}
}

private void packPrimitive(MessageBufferPacker packer, Object value) throws IOException {
if(value instanceof String) {
packer.packString((String)value);
}
else if(value instanceof Integer) {
packer.packInt((Integer) value);
}
else if(value instanceof Boolean) {
packer.packBoolean((boolean)value);
}
else if(value instanceof Double) {
packer.packDouble((double)value);
}
else if(value instanceof Long) {
packer.packLong((long)value);
}
else {
throw new IOException("Invalid packing value of type " + value.getClass().getName());
}
}

关于java - MsgPack 在 Android 中序列化一个 JsonObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38764449/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com