Вопрос по json, java, parsing – Как преобразовать массив JSON в список Java. Я использую Свенсон

5

Я пытаюсь преобразовать несколько объектов одного типа вList на Яве. Например, мой 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
@Ted Hopp: Спасибо за создание / добавление тега svenson. Boundless

Ваш Ответ

4   ответа
1

у меня есть 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.

0
     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);
Это было бы более полезно, если бы вы также добавили комментарии или описание того, как это решить проблему, а не просто разместили стену кода.
4

Я решил это, изменив мой 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);
    }
3

Вы не можете конвертировать этот JSON вList но вы можете преобразовать это вMap.
Увидеть свой JSONString:

...
"Example": [
        {
            "foo": "a1",
            "bar": "b1",
            "fubar": "c1"
        },
        {
            "foo": "a2",
            "bar": "b2",
            "fubar": "c2"
        },
        ...
]
}

Here "Example" is key(String) and value is List object of Example.

Попробуй это:

 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;
    }
}

OutPut:

VALUE :->a1
VALUE :->a2
VALUE :->a3
Спасибо, это работает отлично. Я не уверен, в чем проблема была раньше, но это работает по мере необходимости. Boundless
@ Без границ - невозможно. Я обновлю пример полного кода. Я просто ответил вам, почему и где это было неправильно. Спасибо
Спасибо за ответ. Это не работает. Когда он попадает в строку: for (Пример примера: entry.getValue ()) {я получаю следующую ошибку: java.util.HashMap не может быть приведен к com.xxx.Example Boundless

Похожие вопросы