我使用GSON嘗試,但我沒有好的結果。
幸運的是,與Jackson或Gson的解決方案相當容易。以下兩個示例演示了這兩個API。
JSON輸入:
[
{
"ItemId":22,
"ItemName":"ASA 5505",
"AssetNmbr":"",
"EmployeeId":"",
"Type":"",
"Category":"",
"PurchaseDt":"",
"PurchaseBy":null,
"IssueDt":"",
"IssueBy":null,
"Price":"300.00",
"SerialNmbr":"JMX1538408E",
"MacAddress":null,
"LocationNm":"Stock",
"Notes":null
},
{
"ItemId":11,
"ItemName":"QRQ 1234",
"AssetNmbr":"A1",
"EmployeeId":"42",
"Type":"BIG",
"Category":"ORANGE",
"PurchaseDt":"yesterday",
"PurchaseBy":null,
"IssueDt":"",
"IssueBy":null,
"Price":"1.00",
"SerialNmbr":"CJEUI323EK22",
"MacAddress":null,
"LocationNm":"Purple",
"Notes":"the quick brown fox..."
}
]
一個匹配的Java數據結構(反序列化):
class Item
{
int ItemId;
String ItemName;
String AssetNmbr;
String EmployeeId;
String Type;
String Category;
String PurchaseDt;
String PurchaseBy;
String IssueDt;
String IssueBy;
String Price;
String SerialNmbr;
String MacAddress;
String LocationNm;
String Notes;
@Override
public String toString()
{
return String.format("Item: ItemId=%d, ItemName=%s, Price=%s, SerialNmbr=%s", ItemId, ItemName, Price, SerialNmbr);
}
}
傑克遜:
import java.io.File;
import java.util.List;
import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
import org.codehaus.jackson.annotate.JsonMethod;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;
public class JacksonFoo
{
public static void main(String[] args) throws Exception
{
ObjectMapper mapper = new ObjectMapper().setVisibility(JsonMethod.FIELD, Visibility.ANY);
List<Item> items = mapper.readValue(new File("input.json"), new TypeReference<List<Item>>(){});
System.out.println(items);
// output:
// [Item: ItemId=22, ItemName=ASA 5505, Price=300.00, SerialNmbr=JMX1538408E,
// Item: ItemId=11, ItemName=QRQ 1234, Price=1.00, SerialNmbr=CJEUI323EK22]
}
}
隨着GSON:
import java.io.FileReader;
import java.util.List;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class GsonFoo
{
public static void main(String[] args) throws Exception
{
Gson gson = new Gson();
List<Item> items = gson.fromJson(new FileReader("input.json"), new TypeToken<List<Item>>(){}.getType());
System.out.println(items);
// output:
// [Item: ItemId=22, ItemName=ASA 5505, Price=300.00, SerialNmbr=JMX1538408E,
// Item: ItemId=11, ItemName=QRQ 1234, Price=1.00, SerialNmbr=CJEUI323EK22]
}
}
注意:不是字符串和INT其他Java數據類型可以用於Item
領域。例如,Jackson和Gson都提供了一些內置支持來自動將格式正確的JSON字符串綁定到java.util.Date
。
這是json的響應是你從服務器?那就錯了。你可以在這裏查看:http://jsonlint.com/ –
是的,我從WCF服務發送它,用C#編寫。它使用ObjectServices列表並使用JavaScriptSerializer轉換整個列表。 – Cody