Avatar billede mik28 Seniormester
24. september 2011 - 14:08 Der er 8 kommentarer og
1 løsning

httpclient og JSON

Hej Eksperter

Jeg har noget kode som ser således ud

<%
    HttpClient client = new HttpClient();

    client.getHttpConnectionManager().getParams().setConnectionTimeout(100);
    client.getHttpConnectionManager().getParams().setSoTimeout(200);

    String url = "DER_HVOR_XML_HENTES";
    GetMethod method = new GetMethod(url);
 
    try{
    client.executeMethod(method);
    }
    catch (Exception e){
    out.print("Exception er: "+e);
    }
    String s = method.getResponseBodyAsString();
 
    try {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    Document trae = factory.newDocumentBuilder().parse(new InputSource(new StringReader(s)));

    NodeList bla = XPathAPI.selectNodeList(trae, "DER/HVOR/LISTEN/ER/text()");

    for (int i = 0; i < bla.getLength(); i++) {
      out.print(bla.item(i).getNodeValue());
    }

    }catch (Exception e) { 
      out.print("Exception er: "+e);
  }
%>

Mit problem er at jeg nu modtager et JSON objekt hvordan får jeg skrevet det om så jeg f.x kan få fat i eksemple/forsteitem
Avatar billede mik28 Seniormester
24. september 2011 - 14:13 #1
Jeg skal egenligt bare kalde en webservice som svarer tilbage med JSON. Ud fra hvad den svarer med skal der så ske forskellige ting
Avatar billede arne_v Ekspert
24. september 2011 - 15:14 #2
Du skal jo have fat i et Java lib som forstaar JSON.

http://code.google.com/p/google-gson/ har et godt ry!
Avatar billede mik28 Seniormester
24. september 2011 - 15:30 #3
det vil sige at jeg slet ikke kan bruge ovenstående?
Avatar billede arne_v Ekspert
24. september 2011 - 15:36 #4
HttpClient er helt fin.

Men naar det er JSON skal du bruge en JSON parser ikke en XML parser.
Avatar billede arne_v Ekspert
24. september 2011 - 16:00 #5
Jeg kan proeve at bikse et eksempel.
Avatar billede arne_v Ekspert
24. september 2011 - 16:26 #6
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;

import com.google.gson.Gson;

public class ReadJSON {
    public static void main(String[] args) throws Exception {
        HttpClient client = new HttpClient();
        GetMethod get = new GetMethod("http://localhost:81/somejson.php");
        client.executeMethod(get);
        String json = get.getResponseBodyAsString();
        System.out.println(json);
        Gson gson = new Gson();
        Data o = gson.fromJson(json, Data.class);
        System.out.println(o.getIv() + " " + o.getSv());
    }
}

class Data {
    private int iv;
    private String sv;
    public int getIv() {
        return iv;
    }
    public void setIv(int iv) {
        this.iv = iv;
    }
    public String getSv() {
        return sv;
    }
    public void setSv(String sv) {
        this.sv = sv;
    }
}

udskriver:

{ "iv": 123, "sv": "ABC" }
123 ABC
Avatar billede arne_v Ekspert
24. september 2011 - 16:32 #7
Hvis du ikke har en data klasse:

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;

import com.google.gson.JsonElement;
import com.google.gson.JsonParser;

public class ReadJSON2 {
    public static void main(String[] args) throws Exception {
        HttpClient client = new HttpClient();
        GetMethod get = new GetMethod("http://localhost:81/somejson.php");
        client.executeMethod(get);
        String json = get.getResponseBodyAsString();
        System.out.println(json);
        JsonParser gson = new JsonParser();
        JsonElement o = gson.parse(json);
        int iv = o.getAsJsonObject().get("iv").getAsInt();
        String sv = o.getAsJsonObject().get("sv").getAsString();
        System.out.println(iv + " " + sv);
    }
}

udskriver:

{ "iv": 123, "sv": "ABC" }
123 ABC
Avatar billede mik28 Seniormester
25. september 2011 - 07:39 #8
du er og bliver alt for sej. Tusinde tak
Avatar billede arne_v Ekspert
25. september 2011 - 16:04 #9
saa smider jeg et svar
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
Kategori
Kurser inden for grundlæggende programmering

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