java - проблема извлечения / декодирования json - json внутри json? - PullRequest
0 голосов
/ 13 октября 2011

очень простой вопрос java / json.

У меня есть следующий тестовый фрагмент кода. Я могу получить 1-й элемент, используя ".get ()" либо по индексу, либо по ключу. но я не могу получить другие элементы по ключу ...

Тест умирает, и в командной строке ничего нет .. Я предполагаю, что это из-за того, что что-то неправильно настроено в моем env для отображения ошибочных результатов ..

UPDATE :: Хорошо ... похоже, что настоящая проблема в том, что я не знаю, как получить предмет, и сначала определить, к какому «типу» он должен быть приведен. для "псевдонима", "имени" .. если я приведу их как String .. я получу правильный результат ..

Итак, как можно пройти по списку ключей / значений json, чтобы определить, как правильно получить каждый элемент ??

Тестовый код:

import org.json.simple.JSONObject;
import org.json.simple.*;
//import org.json.simple.JSONValue;


public class asuH {

public static void main(String[] args){
    final String[] arguments = args;

    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            try{

                String json_=arguments[0];


                //--get the page for the 1st and 2nd urls...

                //test the json input..
                System.out.println("asdfsfd \n");
                System.out.println(json_);

                //JSONObject obj=new JSONObject();
                //Object obj=JSONValue.parse(json_);

                String k9="{\"nickname\":null,\"num\":100,\"contact\":{\"phone\":\"123456\",\"zip\":\"7890\"},\"balance\":1000.21,\"is_vip\":true,\"name\":\"foo\"}";

                //JSONObject obj = (JSONObject)JSONValue.parse(json_);
                JSONObject obj = (JSONObject)JSONValue.parse(k9);

                System.out.print("11 \n");
                String fa = (String)obj.get("nickname");
                System.out.print(fa);
                System.out.print("22 \n");
                fa = (String)obj.get("contact");  //<< not working!!!
                System.out.println("22 cc\n");
                System.out.println(fa);

                String ttt=obj.toString();
                System.out.print(ttt);

                System.out.println("\n s4354455 \n");
                System.exit(0);


            } 
                catch (Exception ex) {}
                System.exit(0);
        }
    });
}

}

любые мысли / указатели приветствуются.

спасибо

Ответы [ 2 ]

1 голос
/ 13 октября 2011

Значение, соответствующее свойству с именем contact , не является String.Используйте соответствующий метод получения, и не читайте.

// snip...
String fa = obj.getString("nickname");
// snip...
JsonObject contact = obj.getObject("contact");
// and so on
0 голосов
/ 13 октября 2011

Вы можете получить поле от вашего объекта и спросить его тип:

Object field = obj.get("field");
if (field instanceof JSONArray) {
    ...
} else if (field instanceof JSONObject) {
    ...
} else if (field instanceof Number) {
    ...
} else  {
    ...
}

Вы получите картинку ...

...