2012-03-26 70 views
1

我是J2ME中JSON编程的新手。如何在J2ME中获取和设置JSONObject,JSONArray

我发现Json用于像XML那样交换数据。

我想知道从JSONtoObject在Array对象的交换,反之亦然

下面写的代码,我从JSON转换为对象,反之亦然。

但我不知道如何为复杂的数据结构不喜欢阵列等

//应用程序加载器

import javax.microedition.midlet.MIDlet; 
import javax.microedition.midlet.MIDletStateChangeException; 


public class AppLoader extends MIDlet { 

    public AppLoader() { 
     // TODO Auto-generated constructor stub 

     // Converting Object to JSON 

     UserData data=new UserData(); 
     data.setId(10); 
     data.setName("Yatin"); 
     data.setDescription("Testing JSON in J2ME"); 
     System.out.println("Convert to JSON"+data.toJSON()); 


     //Convert JSON to Object 
     String sample="{\"id\":99,\"name\":\"Tester\",\"description\":\"This is JSON Data\"}"; 
     UserData data2=new UserData(); 
     data2.fromJSON(sample); 
     System.out.println("Convert from JSON "+data2); 
    } 

    protected void destroyApp(boolean arg0) throws MIDletStateChangeException { 
     // TODO Auto-generated method stub 

    } 

    protected void pauseApp() { 
     // TODO Auto-generated method stub 

    } 

    protected void startApp() throws MIDletStateChangeException { 
     // TODO Auto-generated method stub 

    } 

} 

在这个类中,我创建getter和setter的String类型对象,然后创建的JSONObject创建JSON对象创建一个JSON对象,然后反之亦然按功能toJSON()fromJSON()

//用户数据类

import org.json.me.JSONException; 
import org.json.me.JSONObject; 


public class UserData { 
    private int id; 
    private String name; 
    private String description; 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 

    public String toString() 
    { 
     return getId()+"-"+getName()+"-"+getDescription(); 
    } 



    public String toJSON() { 
     // TODO Auto-generated method stub 
     JSONObject inner=new JSONObject(); 

     try { 
      inner.put("id",getId()); 
      inner.put("description", getDescription()); 
      inner.put("name", getName()); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return inner.toString(); 
    } 

    public void fromJSON(String jsonString) { 
     // TODO Auto-generated method stub 
     try { 
      JSONObject json=new JSONObject(jsonString); 
      setId(json.getInt("id")); 
      setDescription(json.getString("description")); 
      setName(json.getString("name")); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 



    } 

} 

我找到了更好的链接,这个问题

http://jimmod.com/blog/2011/09/java-me-j2me-json-implementation-for-array-object/

回答

4

Check this link for different JSON Data Set Sample

一个例子::: JSON字符串数组

{ 
    "id": "0001", 
    "type": "donut", 
    "name": "Cake", 
    "ppu": 0.55, 
    "batters": 
     { 
      "batter": 
       [ 
        { "id": "1001", "type": "Regular" }, 
        { "id": "1002", "type": "Chocolate" }, 
        { "id": "1003", "type": "Blueberry" }, 
        { "id": "1004", "type": "Devil's Food" } 
       ] 
     }, 
    "topping": 
     [ 
      { "id": "5001", "type": "None" }, 
      { "id": "5002", "type": "Glazed" }, 
      { "id": "5005", "type": "Sugar" }, 
      { "id": "5007", "type": "Powdered Sugar" }, 
      { "id": "5006", "type": "Chocolate with Sprinkles" }, 
      { "id": "5003", "type": "Chocolate" }, 
      { "id": "5004", "type": "Maple" } 
     ] 
} 

要检查其有效嵌套或不是check this link (JSON Validator)

要检查JSON Viewer

因此,这里是代码拿来看::

String json = "{\"id\":\"0001\",\"type\":\"donut\",\"name\":\"Cake\"" 
       + ",\"ppu\":0.55,\"batters\":{\"batter\":[" 
       + "{\"id\":\"1001\",\"type\":\"Regular\"},{\"id\":\"1002\"," 
       + "\"type\":\"Chocolate\"},{\"id\":\"1003\"," 
       + "\"type\": \"Blueberry\" },{ \"id\": \"1004\", " 
       + "\"type\": \"Devil's Food\" } ] }," 
       + " \"topping\":[" 
       + "{ \"id\": \"5001\", \"type\": \"None\" }," 
       + "{ \"id\": \"5002\", \"type\": \"Glazed\" }," 
       + "{ \"id\": \"5005\", \"type\": \"Sugar\" }," 
       + "{ \"id\": \"5007\", \"type\": \"Powdered Sugar\" }," 
       + " { \"id\": \"5006\", \"type\": \"Chocolate with Sprinkles\" }," 
       + "{ \"id\": \"5003\", \"type\": \"Chocolate\" }," 
       + "{ \"id\": \"5004\", \"type\": \"Maple\" }]}"; 
     try { 
      JSONObject root = new JSONObject(json); 
      String id = root.getString("id"); 
      double dd = root.getDouble("ppu"); 

      System.out.println(""+id); 
      System.out.println(""+dd); 

      JSONObject batters=new JSONObject(root.getString("batters")); 
      JSONArray batter=new JSONArray(batters.getString("batter")); 

      for(int j=0;j<batter.length();j++){ 
       JSONObject navgt_batter=new JSONObject(batter.getString(j)); 
       String id_batter= navgt_batter.getString("id"); 
       String type_batter=navgt_batter.getString("type"); 
        System.out.println(""+id+" "+type_batter); 
      } 

      JSONArray topping=root.getJSONArray("topping"); 
      for(int k=0;k<topping.length();k++){ 
       JSONObject navgt_batter=new JSONObject(topping.getString(k)); 
       String id_top =navgt_batter.getString("id"); 
       String type_top=navgt_batter.getString("type"); 
       System.out.println(""+id_top+" "+type_top); 
      } 

     } catch (JSONException ex) { 
      ex.printStackTrace(); 
     } 

您可以使用相同的概念设定&得到像上面你没有数据。复杂的数据结构在JSON中总是很容易处理,不用担心。由于

+0

这是一个很好的方法谢谢 – Yatin 2012-03-26 14:09:22

+0

你还有这个罐子吗?我试图从源文件创建它,但我可能做错了什么,因为我不能得到它的工作:S https://github.com/upictec/org.json.me – eddy 2014-05-23 23:47:58

+0

是的,请我找不到任何地方的瓶 – Axel 2014-05-24 12:43:03

0

它几乎以同样的方式..所有你需要的是刚刚通过数组循环...我添加标签您的样本JSON数据

String sample = "{\"id\":99,\"name\":\"Tester\",\"description\":\"This is JSON Data\",\"tags\":[\"eat\",\"swim\",\"sleep\"]}"; 
    try { 
     JSONObject objSample = new JSONObject(sample); 
     JSONArray array = new JSONArray(objSample.getJSONArray("tags").toString()); 
     System.out.println(objSample.get("id").toString()); 
     System.out.println(objSample.get("name").toString()); 
     System.out.println(objSample.get("description").toString()); 
     for (int i = 0; i < array.length(); i++) { 
      System.out.println(array.get(i).toString()); 
     } 

    } catch (Exception e) { 
     System.out.println(e.getMessage()); 
    } 
} 

输出

99 
    Tester 
    This is JSON Data 
    eat 
    swim 
    sleep 

我希望这有助于

感谢 :)

的理解
+0

你还有罐子吗?我试图从源文件创建它,但我可能做错了什么,因为我无法得到它的工作:S github.com/upictec/org.json.me – eddy 2014-05-24 00:04:42

+0

是的请我不能找到任何地方的罐子! – Axel 2014-05-24 12:45:58

1

在下面的链接 http://jimmod.com/blog/2011/09/java-me-j2me-json-implementation-for-array-object/

他们讲解了JSONArray如何使用

public void fromJSON(String jsonString) { 
     try { 
      JSONObject json = new JSONObject(jsonString); 
      setApi_status(json.getString("api_status")); 
      JSONArray jsonArray = json.getJSONArray("threads"); 
      int total = jsonArray.length(); 
      ThreadData[] threads = new ThreadData[total]; 
      for (int i=0;i<total;i++) { 
       String threadsJSON = jsonArray.getString(i); 
       threads[i] = new ThreadData(); 
       threads[i].fromJSON(threadsJSON); 
      } 
      setThreads(threads); 
     } catch (JSONException ex) { 
      ex.printStackTrace(); 
     } 
    } 
    public String toJSON() { 
     JSONObject inner = new JSONObject(); 
     try { 
      inner.put("api_status", getApi_status()); 
      JSONArray jsonArray = new JSONArray(); 
      ThreadData[] threads = getThreads(); 
      for (int i=0;i<threads.length;i++) { 
       jsonArray.put(threads[i].toJSON()); 
      } 
      inner.put("threads", jsonArray); 
     } catch (JSONException ex) { 
      ex.printStackTrace(); 
     } 
     return inner.toString(); 
    } 

哪里Threaddata是一个JSONObject中定义的类,它已在数组对象作了 退房链接

+0

你还有罐子吗?我试图从源文件创建它,但我可能做错了什么,因为我无法得到它的工作:S github.com/upictec/org.json.me – eddy 2014-05-23 23:53:22

+0

是的请我不能找到任何地方的罐子! – Axel 2014-05-24 12:43:23