2013-10-28 49 views
0

我在我的JSON中返回了一个字节数组。从JSON获取字节

JSON

[{"template":167,255,1,30,179,0,218,0,2,88,1,184,0], "template2":null, "template3":null, "Client_Id":1160739}]

在Java中,我怎么能恢复该字节数组?

我试着在JSON而不是字节数组中返回一个字符串,但是当我转换为字节时,它会改变我需要的值。例如,167是我需要的值,因为这已经是字节值,但是如果我尝试将167转换为字节,它将返回另一个值,因此我需要将它恢复为字节值。

JAVA

ArrayList<JSONObject> vetor = ArrayJson(client); 
byte[] template = (byte[])vetor.get(0).get("template"); 

我使用json.org/java库构建JSON助手类。

+0

Java中没有内置的JSON解析器。你在使用图书馆吗?哪一个? (不要在评论中回复 - 编辑问题) – slim

+0

你有控制json生产者吗? – epoch

+0

@epoch是的,我有。有一些想法来改变一些东西? –

回答

1

byte数据类型适用于256个不同的数字 - 但在java中,当您使用字节时,它们被解释为带符号的二进制补码数。这很可能发生在你身上。请注意,位模式没有改变,只有输出改变。

您可以(b & 0xff)

0

JSON没有字节的概念收回字节b无符号值,所以你有什么是数字数组。 您可以遍历它们并通过将每个数字转换为byte来建立一个字节数组。

假设你有你的数字数组使用选择的JSON库int[]阵列,只要做到这一点:

int[] numbers = ... 
byte[] bytes = new byte[numbers.length]; 
for (int i=0; i<numbers.length;i++) { 
    bytes[i] = (byte)numbers[i]; 
} 
+0

这将为我的字节数组中存在的每个元素产生不同的值 –

0

下面是代码: 的类存在于org.json包。

String jsonString = "{'template':[167,255,1,30,17,1,204,0,1,237,0,128,0] }"; 

JSONObject jObject = new JSONObject(jsonString); 
JSONArray jArray = jObject.getJSONArray("template"); 
byte[] array = new byte[jArray.length()]; 

for(int i = 0; i < jArray.length(); i++) { 
    array[i] = (byte)jArray.getInt(i); 
} 
+0

这将返回负值,如'http://stackoverflow.com/questions/9609394/java-byte- array-contains-negative-numbers'我需要e 确切地说,返回的数字是这个数组,因为它们已经是字节值 –

+2

@Lucas_Santos正如我在我的回答中所说的:没有办法让ie 204从一个字节,除非你正确地掩盖了该值,因为转换为int扩展了符号。如果您需要204并且在打印时担心一些“负数”数字,**不要使用字节**。 – Ingo