【问题标题】:How to get and set JSONObject , JSONArray in J2ME如何在 J2ME 中获取和设置 JSONObject、JSONArray
【发布时间】:2012-03-26 12:03:14
【问题描述】:

我是 J2ME 中 JSON 编程的新手。

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

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

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

但我不知道如何处理数组等复杂的数据结构。

// 应用加载器

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

    }

}

在这个类中,我为 String 类型的对象创建了 getter 和 setter,然后创建了 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/

【问题讨论】:

    标签: java arrays json java-me midp


    【解决方案1】:

    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 中总是很容易处理,不用担心。谢谢

    【讨论】:

    • 感谢您的好方法
    • 罐子还在吗??我试图从源文件创建它,但我可能做错了什么,因为我无法让它工作:S github.com/upictec/org.json.me
    • 是的,我在任何地方都找不到罐子!!
    【解决方案2】:

    在下面的链接中 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 定义的类,它是在数组对象中创建的 查看链接

    【讨论】:

    • 罐子还在吗??我试图从源文件创建它,但我可能做错了,因为我无法让它工作:S github.com/upictec/org.json.me
    • 是的,我在任何地方都找不到罐子!!
    【解决方案3】:

    它的方式几乎相同......你所需要的只是循环遍历数组......我在你的示例 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
    

    希望对你有帮助

    谢谢 :)

    【讨论】:

    • 罐子还在吗??我试图从源文件创建它,但我可能做错了,因为我无法让它工作:S github.com/upictec/org.json.me
    • 是的,我在任何地方都找不到罐子!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多