Avatar billede rasmuzzen Nybegynder
07. januar 2014 - 20:14 Der er 10 kommentarer og
1 løsning

Har følgende JSON

{"ValidateUserByUGUIDResult":"[{\"UserIsValidated\":true}]"}


Hvordan f..... får jeg fat i boolean true værdien.

Lige om lidt har jeg flere records, så gerne dg svar med noget med en løkke.

Jeg har lavet kode der kan hive [{\"UserIsValidated\":true}], men kan ikke komme det sidste lille skridt...
Avatar billede arne_v Ekspert
07. januar 2014 - 20:24 #1
Hvilken JSON parser bruger du?
Avatar billede arne_v Ekspert
07. januar 2014 - 20:34 #2
GSon? XStream? JSon.org?
Avatar billede rasmuzzen Nybegynder
07. januar 2014 - 21:20 #3
json.org, og jeg compiler i Android Studio.
Avatar billede arne_v Ekspert
07. januar 2014 - 21:44 #4
Jeg kan proeve at bixe et eksempel.
Avatar billede rasmuzzen Nybegynder
07. januar 2014 - 22:28 #5
Det er bare den s*ide kommando til at skille [{\"UserIsValidated\":true}] ad i en string og en bool værdi, som er array delen som jeg ser det beskrevet omkring JSON. Det med at hive Array enhederne ud af objektet er på plads.

PS: et tillægsspørgsmål. Du bruger siden her meget, oplever du også ofte at den stener når man sender....

JSONObject jObj = new JSONObject(result);
List<String> allRecords = new ArrayList<String>();

for (int i=0; i< jObj.length(); i++)
{
("ValidateUserByUGUIDResult").toString();
String name = jObj.getString("UserIsValidated");
// det er her jeg skal dele name op i en string og en bool allRecords.add(name);
}
Avatar billede rasmuzzen Nybegynder
07. januar 2014 - 23:32 #6
Ja min kode ovenfor virker vist ikke helt optimalt.
Avatar billede arne_v Ekspert
08. januar 2014 - 02:12 #7
Jeg haaber at det er dette her du har:


package january;

import org.json.JSONArray;
import org.json.JSONObject;

public class JsonParse {
    public static void main(String[] args) {
        String json = "{\"ValidateUserByUGUIDResult\":[{\"UserIsValidated\":true}]}";
        System.out.println(json);
        JSONObject obj = new JSONObject(json);
        JSONArray vup = obj.getJSONArray("ValidateUserByUGUIDResult");
        for(int i = 0; i < vup.length(); i++) {
            JSONObject elm = vup.getJSONObject(i);
            boolean isval = elm.getBoolean("UserIsValidated");
            System.out.println(isval);
        }
    }
}


Men som JSOn ser ud i spoergsmaalet saa kunne du have dette her mystiske dobbelt JSON encodet:


package january;

import org.json.JSONArray;
import org.json.JSONObject;

public class FunkyJsonParse {
    public static void main(String[] args) {
        String json = "{\"ValidateUserByUGUIDResult\":\"[{\\\"UserIsValidated\\\":true}]\"}";
        System.out.println(json);
        JSONObject obj = new JSONObject(json);
        String vupstr = obj.getString("ValidateUserByUGUIDResult");
        JSONArray vup = new JSONArray(vupstr);
        for(int i = 0; i < vup.length(); i++) {
            JSONObject elm = vup.getJSONObject(i);
            boolean isval = elm.getBoolean("UserIsValidated");
            System.out.println(isval);
        }
    }
}
Avatar billede arne_v Ekspert
08. januar 2014 - 04:35 #8
Men jeg nok anbefale at bruge GSON:


package january;

import java.util.List;

import com.google.gson.Gson;

public class RealJsonParse {
    public static void main(String[] args) {
        String json = "{\"validateUserByUGUIDResult\":[{\"userIsValidated\":true}]}";
        System.out.println(json);
        Gson gson = new Gson();
        AllValRes o = gson.fromJson(json, AllValRes.class);
        for(OneValRes elm : o.getValidateUserByUGUIDResult()) {
            System.out.println(elm.isUserIsValidated());
        }
    }
}

class AllValRes {
    private List<OneValRes> validateUserByUGUIDResult;
    public List<OneValRes> getValidateUserByUGUIDResult() {
        return validateUserByUGUIDResult;
    }
    public void setValidateUserByUGUIDResult(List<OneValRes> validateUserByUGUIDResult) {
        this.validateUserByUGUIDResult = validateUserByUGUIDResult;
    }
}

class OneValRes {
    private boolean userIsValidated;
    public boolean isUserIsValidated() {
        return userIsValidated;
    }
    public void setUserIsValidated(boolean userIsValidated) {
        this.userIsValidated = userIsValidated;
    }
}
Avatar billede rasmuzzen Nybegynder
08. januar 2014 - 21:34 #9
Tak Arne, ja du har ret den var dobbelt wrappet,det havde jeg ikke fået skrevet8. Een gang da dataset fra sql serveren blev omsat til JSON, samt een gang mere via WCF servicen. Og så lige min fejl, som gør at min streng så mærkelig ud. MAN SKAL HUSKE AT NAVNGIVE SINE TABELLER, ellers går det galt ved oversættelsen fra DataSet til JSON. Jeg har rodet en del rundt for at få min logik oven i hovedet til at falde på plads. Der står meget sludder på nettet om emnet, heldigvis også meget godt.
Så dobbelt wrap er det blevet til samt dobbelt op på "tilbage til objekt" logikken den anden vej i java. Og der kommer dine linjer lidt modificerede ind. Havde også fundet et eksempel meget lig dit på stackoverflow, så jeg var på rette vej. Nu er der sørme heller ikke meget mere der kan drille. Bare smid et svar. Og stort tak for din hurtige responsetid.

MVH
Avatar billede arne_v Ekspert
08. januar 2014 - 21:37 #10
svar
Avatar billede arne_v Ekspert
08. januar 2014 - 21:39 #11
Og som du nok har fornemmet saa ville jeg ved noget paenere JSON anbefale GSON loesningen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester