Nie ma racji, ponieważ chciałem stworzyć obiekt json z ciągu json, odpowiedź udzielona przez dogbane pokazała właściwą ścieżkę do odpowiedzi.
Pan Sajid Shaikh,
Obie odpowiedzi Mappana i dogbane są poprawne, ale używają różnych modułów. Należy zachować ostrożność, aby zaimportować poprawny moduł dla każdego z nich, ponieważ istnieje wiele modułów JSONObject.
Czy możesz podać nazwę pakietu, który chcesz zaimportować?
odszedł phishing
10
import org.json.simple.JSONObject
Działa
1
Wersja 1.1.1 json-simple wydaje się mieć pewien problem. Powyższe daje „Nieobsługiwany wyjątek” parser.parse(i chce try-catch lub rzutów. Ale po dodaniu jednego z nich pojawia się Unhandled exception type ParseExceptionbłąd lub błąd NoClassDefFound dla ParseException, org.json.simple.parsernawet jeśli masz json-simple w zależnościach Mavena i jest wyraźnie widoczny w bibliotece projektu.
Juha Untinen,
2
org.json to biblioteka typu proof-of-concept. jest to jedna z najgorszych pod względem wydajności i funkcji. Przed wyborem należy sprawdzić zestaw funkcji i wydajność biblioteki json lib. Zobacz ten test porównawczy, który zrobiłem przy użyciu JMH: github.com/fabienrenaud/java-json-benchmark Wyraźnie pokazuje Jacksona szybciej niż cokolwiek innego i 5 do 6 razy szybciej niż org.json.
fabien
5
JSONParser parser = new JSONParser (); wydaje się być w deprecjacji
„Jeśli poprosisz o przetwarzanie po stronie klienta, zależy to od twojego języka programowania. Na przykład w Javie możesz użyć google-gson”. Myślę, że prawdopodobnie miałeś na myśli raczej „serwer” niż „klient”. I otagował swoje pytanie „Java”.
TJ Crowder
+1. Używałem Gsona w 4-5 projektach teraz, w zupełnie innych kontekstach, po stronie serwera i klienta (także w aplikacji na Androida) i nigdy mnie to nie zawiodło. Bardzo ładne i czyste lib.
Jonik
Jeśli chcesz używać gson, ale nie masz wstępnie zdefiniowanej klasy POJO (tj. Masz ogólny Json bez wstępnie zdefiniowanej struktury), ta odpowiedź może pomóc - stackoverflow.com/questions/4110664/...
Leandro David
40
Istnieje wiele serializatorów i deserializatorów Java JSON powiązanych ze stroną główną JSON .
Myślę jednak, że twoje pytanie jest bardziej jak: Jak skończyć z rzeczywistym obiektem JSONObject z ciągu JSON.
Patrzyłem na interfejs google-json i nie mogłem znaleźć niczego tak prostego jak interfejs org.json, który prawdopodobnie jest tym, czego chcesz używać, jeśli bardzo potrzebujesz JSONObject.
Myślę, że piękno Google-gson polega na tym, że nie musisz zajmować się JSONObject. Po prostu łapiesz Jsona, przekazujesz klasę, do której chcesz dokonać deserializacji, a twoje atrybuty klasy zostaną dopasowane do JSON, ale z drugiej strony każdy ma swoje własne wymagania, być może nie możesz sobie pozwolić na luksus, na który mają wstępnie zmapowane klasy strona deserializująca, ponieważ po stronie generującej JSON może być zbyt dynamicznie. W takim przypadku wystarczy użyć json.org.
publicstaticJsonNode stringToJSONObject(String jsonString)throwsException{ObjectMapper jacksonObjMapper =newObjectMapper();return jacksonObjMapper.readTree(jsonString);}//Example:String jsonString ="{\"phonetype\":\"N95\",\"cat\":\"WP\"}";JsonNode jsonNode = stringToJSONObject(jsonString);Assert.assertEquals("Phonetype value not legit!","N95", jsonNode.get("phonetype").getTextValue());Assert.assertEquals("Cat value is tragic!","WP", jsonNode.get("cat").getTextValue());
UWAGA: GSON z deserializacją interfejsu spowoduje wyjątek taki jak poniżej.
"java.lang.RuntimeException: Unable to invoke no-args constructor for interface XXX. Register an InstanceCreator with Gson for this type may fix this problem."
Podczas deserializacji; GSON nie wie, który obiekt musi być intantowany dla tego interfejsu.
Teraz objjest konwertowana JSONObjectforma odpowiedniego ciągu. Dzieje się tak w przypadku, gdy masz pary nazwa-wartość.
W przypadku ciągu możesz bezpośrednio przekazać konstruktor JSONObject. Jeśli to będzie poprawne json String, to dobrze, w przeciwnym razie spowoduje wyjątek.
Dosłownie robienie tego, co napisałeś: user.put("email", "[email protected]")wyzwala nieobsługiwany wyjątek.
Sebastialonso,
1
@Sebastialonso Tak, musisz złapać wyjątek. Jak to:try {JSONObject jObj = new JSONObject();} catch (JSONException e) {Log.e("MYAPP", "unexpected JSON exception", e);// Do something to recover.}
TheLittleNaruto
@vidya Nie, to nie jest. Rozważ porównanie ponownie.
Odpowiedzi:
Korzystanie z biblioteki org.json :
źródło
JsonObject obj = new JsonParser().parse(jsonString).getAsJsonObject();
Do każdego, kto wciąż szuka odpowiedzi:
źródło
import org.json.simple.JSONObject
parser.parse(
i chce try-catch lub rzutów. Ale po dodaniu jednego z nich pojawia sięUnhandled exception type ParseException
błąd lub błąd NoClassDefFound dla ParseException,org.json.simple.parser
nawet jeśli masz json-simple w zależnościach Mavena i jest wyraźnie widoczny w bibliotece projektu.Możesz użyć
google-gson
. Detale:Przykłady obiektów
(Serializacja)
Pamiętaj, że nie można serializować obiektów z referencjami kołowymi, ponieważ spowoduje to nieskończoną rekurencję.
(Deserializacja)
Kolejny przykład Gsona:
Gson jest łatwy do nauczenia i wdrożenia, musisz wiedzieć, że są dwie następujące metody:
-> toJson () - konwertuje obiekt Java do formatu JSON
-> fromJson () - konwertuje JSON na obiekt Java
Wynik
Zasoby:
Strona główna projektu Google Gson
Podręcznik użytkownika Gson
Przykład
źródło
Istnieje wiele serializatorów i deserializatorów Java JSON powiązanych ze stroną główną JSON .
W chwili pisania tego tekstu są 22:
... ale oczywiście lista może się zmienić.
źródło
Rozwiązanie Java 7
;
źródło
Aby przekonwertować
String
naJSONObject
Ciebie, wystarczy przekazaćString
instancję do KonstruktoraJSONObject
.Na przykład:
źródło
Lubię do tego używać google-gson i to właśnie dlatego, że nie muszę bezpośrednio współpracować z JSONObject.
W takim przypadku miałbym klasę, która będzie odpowiadać właściwościom Twojego obiektu JSON
Myślę jednak, że twoje pytanie jest bardziej jak: Jak skończyć z rzeczywistym obiektem JSONObject z ciągu JSON.
Patrzyłem na interfejs google-json i nie mogłem znaleźć niczego tak prostego jak interfejs org.json, który prawdopodobnie jest tym, czego chcesz używać, jeśli bardzo potrzebujesz JSONObject.
http://www.json.org/javadoc/org/json/JSONObject.html
Z org.json.JSONObject (inny całkowicie inny API) Jeśli chcesz zrobić coś takiego jak ...
Myślę, że piękno Google-gson polega na tym, że nie musisz zajmować się JSONObject. Po prostu łapiesz Jsona, przekazujesz klasę, do której chcesz dokonać deserializacji, a twoje atrybuty klasy zostaną dopasowane do JSON, ale z drugiej strony każdy ma swoje własne wymagania, być może nie możesz sobie pozwolić na luksus, na który mają wstępnie zmapowane klasy strona deserializująca, ponieważ po stronie generującej JSON może być zbyt dynamicznie. W takim przypadku wystarczy użyć json.org.
źródło
musisz zaimportować org.json
źródło
Ciąg do JSON za
Jackson
pomocącom.fasterxml.jackson.databind
:Zakładając, że twój ciąg json reprezentuje to: jsonString = {"phonetype": "N95", "cat": "WP"}
źródło
Jeśli używasz http://json-lib.sourceforge.net (net.sf.json.JSONObject)
to jest dość łatwe:
lub
uzyskaj wartości następnie z json.getString (param), json.getInt (param) i tak dalej.
źródło
Aby przekonwertować ciąg na json, a żądło jest jak json. {„typ telefonu”: „N95”, „kot”: „WP”}
źródło
Użyj JsonNode z szybciejxml do ogólnego analizowania Json. Wewnętrznie tworzy mapę kluczowej wartości dla wszystkich danych wejściowych.
Przykład:
Ciąg wejściowy:
źródło
Nie trzeba używać żadnej zewnętrznej biblioteki.
Zamiast tego możesz użyć tej klasy :) (obsługuje nawet listy, listy zagnieżdżone i json)
Aby przekonwertować ciąg JSON na skrót, użyj tego:
źródło
Codehaus Jackson - Jestem niesamowitym API od 2012 roku dla moich usług RESTful i testów JUnit. Dzięki ich interfejsowi API możesz:
(1) Konwertuj ciąg JSON na bean Java
(2) Konwertuj ciąg JSON na obiekt JSON (JsonNode)
(3) Konwertuj komponent bean Java na JSON String
REFS:
Codehaus Jackson
JsonNode API - jak używać, nawigować, analizować i oceniać wartości z obiektu JsonNode
Tutorial - Prosty tutorial, jak używać Jacksona do konwersji ciągu JSON na JsonNode
źródło
UWAGA: GSON z deserializacją interfejsu spowoduje wyjątek taki jak poniżej.
Podczas deserializacji; GSON nie wie, który obiekt musi być intantowany dla tego interfejsu.
Jest to rozwiązane jakoś tutaj .
Jednak FlexJSON ma to rozwiązanie z natury. podczas szeregowania czasu dodaje nazwę klasy jako część json jak poniżej.
Tak więc JSON będzie trochę oblewał; ale nie potrzebujesz pisać,
InstanceCreator
co jest wymagane w GSON.źródło
Korzystanie z org.json
Jeśli masz ciąg znaków zawierający tekst w formacie JSON, możesz uzyskać obiekt JSON, wykonując następujące czynności:
Teraz, aby uzyskać dostęp do rodzaju telefonu
źródło
Do ustawiania pojedynczego obiektu Json na listę tj
w
List<Location>
posługiwać się
jackson.mapper-asl-1.9.7.jar
źródło
źródło
Lepiej idź w prostszy sposób, używając
org.json
lib. Po prostu zastosuj bardzo proste podejście, jak poniżej:Teraz
obj
jest konwertowanaJSONObject
forma odpowiedniego ciągu. Dzieje się tak w przypadku, gdy masz pary nazwa-wartość.W przypadku ciągu możesz bezpośrednio przekazać konstruktor
JSONObject
. Jeśli to będzie poprawnejson String
, to dobrze, w przeciwnym razie spowoduje wyjątek.źródło
user.put("email", "[email protected]")
wyzwala nieobsługiwany wyjątek.try {JSONObject jObj = new JSONObject();} catch (JSONException e) {Log.e("MYAPP", "unexpected JSON exception", e);// Do something to recover.}