Converter uma string JSON para object no Java ME?

Existe uma maneira em Java / J2ME para converter uma string, como:

{name:"MyNode", width:200, height:100} 

a uma representação interna do object do mesmo, em uma linha de código?

Porque o método atual é muito tedioso:

 Object n = create("new"); setString(p, "name", "MyNode"); setInteger(p, "width", 200); setInteger(p, "height", 100); 

Talvez uma biblioteca JSON?

Eu usei alguns deles e meu favorito é,

http://code.google.com/p/json-simple/

A biblioteca é muito pequena, por isso é perfeita para o J2ME.

Você pode analisar o JSON no object Java em uma linha como essa,

 JSONObject json = (JSONObject)new JSONParser().parse("{\"name\":\"MyNode\", \"width\":200, \"height\":100}"); System.out.println("name=" + json.get("name")); System.out.println("width=" + json.get("width")); 

A opção mais simples é Jackson :

 MyObject ob = new ObjectMapper().readValue(jsonString, MyObject.class); 

Existem outras bibliotecas igualmente simples de usar (Gson já foi mencionado); mas algumas escolhas são mais trabalhosas, como a biblioteca org.json original, que requer a criação de um “JSONObject” intermediário, mesmo que você não precise delas.

GSON é uma boa opção para converter objects java em json e vice-versa.
É uma ferramenta fornecida pelo google.

para converter o json para o object java use: fromJson(jsonObject,javaclassname.class)
para converter object java em object json use: toJson(javaObject)
e o descanso será feito automaticamente

Para mais informações e para download

Você pode fazer isso facilmente com o Google GSON.

Digamos que você tenha uma class chamada User com os campos user, width e height e deseja converter a seguinte string json no object User.

{"name":"MyNode", "width":200, "height":100}

Você pode fazê-lo facilmente, sem ter que lançar (mantendo o comentário do nimcap em mente;)), com o seguinte código:

 Gson gson = new Gson(); final User user = gson.fromJson(jsonString, User.class); 

Onde jsonString é o JSON String acima.

Para mais informações, consulte https://code.google.com/p/google-gson/

Você tem muitos analisadores JSON para Java :

  • JSONObject.java
    Um JSONObject é uma coleção não ordenada de pares nome / valor. Sua forma externa é uma string envolvida em chaves com dois pontos entre os nomes e valores e vírgulas entre os valores e nomes. O formulário interno é um object que possui methods get () e opt () para acessar os valores por nome e methods put () para include ou replace valores por nome. Os valores podem ser qualquer um desses tipos: Boolean, JSONArray, JSONObject, Number e String ou o object JSONObject.NULL.

  • JSONArray.java
    Um JSONArray é uma sequência ordenada de valores. Sua forma externa é uma string envolvida em colchetes com vírgulas entre os valores. A forma interna é um object que possui methods get () e opt () para acessar os valores por index e methods put () para include ou replace valores. Os valores podem ser qualquer um desses tipos: Boolean, JSONArray, JSONObject, Number e String ou o object JSONObject.NULL.

  • JSONStringer.java
    Um JSONStringer é uma ferramenta para produzir rapidamente texto JSON.

  • JSONWriter.java
    Um JSONWriter é uma ferramenta para escrever rapidamente texto JSON para streams.

  • JSONTokener.java
    Um JSONTokener pega uma string de origem e extrai caracteres e tokens dela. Ele é usado pelos construtores JSONObject e JSONArray para analisar cadeias de origem JSON.

  • JSONException.java
    Uma JSONException é lançada quando uma syntax ou erro de procedimento é detectado.

  • JSONString.java
    O JSONString é uma interface que permite que as classs implementem sua serialização JSON.

O site oficial do JSON é onde você deve olhar. Ele provê várias bibliotecas que podem ser usadas com Java, eu pessoalmente usei este, o JSON-lib que é uma implementação do trabalho no site, então ele tem exatamente a mesma class – methods etc nesta página .

Se você clicar nos links de html, poderá encontrar o que quiser.

Em resumo:

Para criar um object json e um array json, o código é:

 JSONObject obj = new JSONObject(); obj.put("variable1", o1); obj.put("variable2", o2); JSONArray array = new JSONArray(); array.put(obj); 

o1, o2, podem ser tipos primitivos (long, int, boolean), Strings ou Arrays.

O processo inverso é bastante simples, quero dizer, converter uma string para json object / array.

 String myString; JSONObject obj = new JSONObject(myString); JSONArray array = new JSONArray(myString); 

Para ser analisado corretamente, você só precisa saber se está analisando uma matriz ou um object.

Use a biblioteca do Google GSON para isso

 public static  T getObject(final String jsonString, final Class objectClass) { Gson gson = new Gson(); return gson.fromJson(jsonString, objectClass); } 

http://iandjava.blogspot.in/2014/01/java-object-to-json-and-json-to-java.html

Como muitos já afirmaram, Uma maneira bem simples de fazer isso usando JSON.simple como abaixo

 import org.json.JSONObject; String someJsonString = "{name:"MyNode", width:200, height:100}"; JSONObject jsonObj = new JSONObject(someJsonString); 

E então use o jsonObj para lidar com objects JSON. por exemplo, jsonObj.get (“name”);

Conforme o link abaixo, JSON.simple está mostrando eficiência constante para arquivos JSON pequenos e grandes

http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/

JSON IO é, de longe, a maneira mais fácil de converter uma cadeia JSON ou um stream de input JSON em um object Java

Cadeia de caracteres para o object Java
Object obj = JsonReader.jsonToJava("[\"Hello, World\"]");

https://code.google.com/p/json-io/

Esta é uma pergunta antiga e o json-simple ( https://code.google.com/p/json-simple/ ) poderia ser uma boa solução na época, mas, por favor, considere que o projeto parece não estar ativo por um tempo!

Sugiro o Gson que agora está hospedado em: https://github.com/google/gson

Se o desempenho é o seu problema, você pode dar uma olhada em alguns benchmarks http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/ que comparam.

Além de http://www.json.org você também pode implementar seu próprio analisador usando javacc e combinando sua gramática / esquema pessoal. Veja esta observação no meu blog: http://plindenbaum.blogspot.com/2008/07/parsing-json-with-javacc-my-notebook.html

Eu escrevi uma biblioteca que usa o json.org para analisar o JSON, mas ele irá criar um proxy de uma interface para você. O código / JAR está em code.google.com.

http://fixjures.googlecode.com/

Não sei se funciona no J2ME. Como usa o Java Reflection para criar proxies, estou pensando que não funcionará. Além disso, atualmente, há uma forte dependência do Google Collections que desejo remover e, provavelmente, é muito pesado para suas necessidades, mas permite que você interaja com seus dados JSON da maneira que procura:

 interface Foo { String getName(); int getWidth(); int getHeight(); } Foo myFoo = Fixjure.of(Foo.class).from(JSONSource.newJsonString("{ name : \"foo name\" }")).create(); String name = myFoo.getName(); // name now .equals("foo name"); 

Jackson para arquivos grandes, GSON para arquivos pequenos e JSON.simples para lidar com ambos.

Basta fazer um object Json em java com o seguinte Json String.No seu caso

 {name:"MyNode", width:200, height:100} 

Se o acima é sua string Json, basta criar um object Json com ele.

 JsonString ="{name:"MyNode", width:200, height:100}"; JSONObject yourJsonObject = new JSONObject(JsonString); System.out.println("name=" + yourJsonObject.getString("name")); System.out.println("width=" + yourJsonObject.getString("width"));