我试图将多个相同类型的对象转换成一个List
中的Java。 例如,我的JSON是:
{
"Example": [
{
"foo": "a1",
"bar": "b1",
"fubar": "c1"
},
{
"foo": "a2",
"bar": "b2",
"fubar": "c2"
},
{
"foo": "a3",
"bar": "b3",
"fubar": "c3"
}
]
}
我有一个类:
public class Example {
private String foo;
private String bar;
private String fubar;
public Example(){};
public void setFoo(String f){
foo = f;
}
public void setBar(String b){
bar = b;
}
public void setFubar(String f){
fubar = f;
}
...
}
我希望能够把JSON字符串我到列表Example
对象。 我愿做这样的事情:
JSONParser parser = new JSONParser();
parser.addTypeHint(".Example[]", Example.class);
List<Example> result = parser.parse(List.class, json);
这样做,我得到一个错误:
Cannot set property Example on class java.util.ArrayList
您不能转换这个JSON来List
,但你可以将此转换为Map
。
请参阅您的JSON String
:
...
"Example": [
{
"foo": "a1",
"bar": "b1",
"fubar": "c1"
},
{
"foo": "a2",
"bar": "b2",
"fubar": "c2"
},
...
]
}
这里的“实施例”是键(字符串)和值是实施例的列表对象。
试试这个:
parser.addTypeHint("Example[]", Example.class);
Map<String,List<Example>> result1 = parser.parse(Map.class, json);
for (Entry<String, List<Example>> entry : result1.entrySet()) {
for (Example example : entry.getValue()) {
System.out.println("VALUE :->"+ example.getFoo());
}
}
的全码Example
:
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.svenson.JSONParser;
public class Test {
public static void main(String[] args) {
JSONParser parser = new JSONParser();
parser.addTypeHint(".Example[]", Example.class);
String json = "{" + "\"Example\": [" + "{" + "\"foo\": \"a1\","
+ "\"bar\": \"b1\"," + "\"fubar\": \"c1\"" + "}," + "{"
+ "\"foo\": \"a2\"," + "\"bar\": \"b2\"," + "\"fubar\": \"c2\""
+ "}," + "{" + "\"foo\": \"a3\"," + "\"bar\": \"b3\","
+ "\"fubar\": \"c3\"" + "}" + "]" + "}\"";
parser.addTypeHint("Example[]", Example.class);
Map<String, List<Example>> result1 = parser.parse(Map.class, json);
for (Entry<String, List<Example>> entry : result1.entrySet()) {
for (Example example : entry.getValue()) {
System.out.println("VALUE :->" + example.getFoo());
}
}
}
}
public class Example {
private String foo;
private String bar;
private String fubar;
public Example(){}
public void setFoo(String foo) {
this.foo = foo;
}
public String getFoo() {
return foo;
}
public void setBar(String bar) {
this.bar = bar;
}
public String getBar() {
return bar;
}
public void setFubar(String fubar) {
this.fubar = fubar;
}
public String getFubar() {
return fubar;
}
}
输出 :
VALUE :->a1
VALUE :->a2
VALUE :->a3
我解决它通过修改我的JSON是形式:
[
{
"foo": "a1",
"bar": "b1",
"fubar": "c1"
},
{
"foo": "a2",
"bar": "b2",
"fubar": "c2"
},
{
"foo": "a3",
"bar": "b3",
"fubar": "c3"
}
]
然后我用Java代码:
JSONParser parser = new JSONParser();
ArrayList list = parser.parse(ArrayList.class, json);
List<Example> result = new ArrayList<Example>();
for(int i = 0 ; i < list.size() ; i++){
HashMap<String, String> map = (HashMap) list.get(i);
Example example = new Example();
example.setFoo(map.get("foo"));
example.setBar(map.get("bar"));
example.setFubar(map.get("fubar"));
result.add(example);
}
我有一个jsonstring是这样的:
[
{"author":"amahta","bookId":1,"bookName":"name"},
{"author":"amahta2","bookId":2,"bookName":"name2"}
]
并将其转换为列表中该代码片段:
List<BookVO> listdata = new ArrayList<BookVO>();
JSONArray jArray = JSONArray.fromObject(booklist);
if (jArray != null) {
for (int i = 0; i < jArray.size(); i++) {
JSONObject obj = JSONObject.fromObject(jArray.get(i));
listdata.add(new BookVO(Long.valueOf(obj.get("bookId")), obj.get("bookName"), obj.get("author")));
}
}
我使用net.sf.json-lib的jar文件。
String paymentMethod = "[{\"paymentType\":\"google_iap\",\"msisdn\":1486890084928,\"operator\":\"maroc_ma\",\"paymentMethod\":\"maroc_ma\",\"reactivationEnabled\":true }]";
PaymentMethod mop = null;
try {
mop = mapper.readValue(paymentMethod, PaymentMethod.class);
} catch (Exception e) {
logger.warn("Error while parsing paymentMethod = " + paymentMethod + " \n" + e);
}
List<PaymentMethod> result = new ArrayList<PaymentMethod>();
result.add(mop);
billingInfo.setPaymentMethods(result);
文章来源: How do I convert a JSON array into a Java List. I'm using svenson