Android 与 JSON 合作

Android working with JSON

我想使用 JSON 来更方便地存储 3 个值。 我要存储的值是 StringStringBoolean。 其中第一个字符串应该用于识别 JSON.

中其他值的 3 个值

最后 - 在用户设置他的设置后,我希望 json 看起来像这样:

{

    "Room1": 
        {
                "IP": "192.168.0.2",
                "use": "true"
        },  
    "Bathroom":
        {
                "IP": "192.168.0.3",
                "use": "false"
        },  
    "Kitchen":
        {
                "IP": "192.168.0.4",
                "use": "true"
        }

        .
        .
        .
        .
}

最后我想 "easily" 检索这些值并更改其中的一些值(例如,将 use 设置为 false)。

注意:JSON 将被转换为字符串并保存在 SharedPreferences 中供以后使用。

实现这个的好方法是什么?他们有什么好的教程或推荐的库吗?

如果此时使用 json 不是一个好主意,我还应该怎么做?

我想我宁愿使用以下 JSON:

{ "Rooms" : [
        {
                "Type" : "Room1",
                "IP"   : "192.168.0.2",
                "use"  : "true"
        },
        {
                "Type" : "Bathroom",
                "IP"   : "192.168.0.3",
                "use"  : "false"
        },
        {
                "Type" : "Kitchen",
                "IP"   : "192.168.0.4",
                "use"  : "true"
        }
    ]
}

使用这个 POJO:

public class Room {

  @Expose
  private String Type;
  @Expose
  private String IP;
  @Expose
  private String use;

  public String getType() {
    return Type;
  }    

  public void setType(String Type) {
    this.Type = Type;
  }

  public String getIP() {
    return IP;
  }

  public void setIP(String IP) {
    this.IP = IP;
  }

  public String getUse() {
    return use;
  }

  public void setUse(String use) {
    this.use = use;
  }
}

添加: 房间列表包装 ArrayList

public class RoomList{

    @Expose
    private ArrayList<Room> Rooms = new ArrayList<Room>();

    public ArrayList<Room> getRooms() {
        return Rooms;
    }

    public void setRooms(ArrayList<Room> Rooms) {
        this.Rooms = Rooms;
    }
}

edited: 反之亦然 Gson:

String jsonString = "{ "Rooms" : [ { "Type" : "Room1", ... }, ... ] }";
RoomList rooms  = new RoomList();

Gson gson = new Gson();
rooms  = gson.fromJson(jsonString, rooms.getClass());

for (Room room : rooms.getRooms())
     System.out.println (room.getType());