Android 生成json字符串

String生成的json数据有两种

1

String json="[{'name':'tom','age':12},{'name':'jack','age':13}]";
JSONArray a = new JSONArray(json);
System.out.println(a.toString());

2

String json2="{'json':[{'name':'tom','age':14},{'name':'jack','age':15}]}";
JSONObject b= new JSONObject(json2);
System.out.println(b.toString());

String类型的数据加“”,然后每个key,value加单引号。

JsonObject生成的数据有两种

1

JSONArray array =new JSONArray();
        JSONObject object =new JSONObject();
        JSONObject object1 =new JSONObject();
        JSONObject obj= new JSONObject();
        try {
            object.put("item1","value1");
            object.put("age",12);
            object.put("name","tom");
            object1.put("item2","value2");
            object1.put("age",12232);
            object1.put("name","tom");
            array.put(object);
            array.put(object1);
            obj.put("name",array);
            System.out.println(obj.toString());
        }catch (Exception e){

        }
        结果:{"name":[{"item1":"value1","name":"tom","age":12},{"item2":"value2","name":"tom","age":12232}]}

2

JSONArray array1 =new JSONArray();
        JSONObject object2 =new JSONObject();
        JSONObject object3 =new JSONObject();
        try {
            object2.put("color","red");
            object2.put("height",20);
            object3.put("color","blue");
            object3.put("height",1010);
            array1.put(object2);
            array1.put(object3);
            System.out.println(array1.toString());
        }catch (Exception e){


        }
       结果:[{"color":"red","height":20},{"color":"blue","height":1010}]

将集合生成json数据

1

Map<String ,String> map =new HashMap<>();
        Map<String ,String> map2 =new HashMap<>();
        map.put("name1","tom1");
        map.put("age1","12");
        map2.put("name1","tom1");
        map2.put("age1","12");
        JSONObject object4 =new JSONObject();
        JSONArray array2 =new JSONArray();
        array2.put(map);
        array2.put(map2);
        object4.put("key",array2);
        System.out.println(object4.toString());
        结果:{"key":[{"name1":"tom1","age1":"12"},{"name1":"tom1","age1":"12"}]}

2

Map<String ,String> map1 =new HashMap<>();
        map1.put("as","adasd");
        map1.put("asfa","afasff");
        JSONArray array3 =new JSONArray();
        array3.put(map1);
        System.out.println(array3.toString());
        结果:[{"asfa":"afasff","as":"adasd"}]

通过Gson生成json

一、单个对象生成json

生成以下类,该怎么生成呢?

1

2

3

4

5

6

{

    "createDate""2015-02-01 10:39:50"

    "id""1"

    "name""传说之美"

    "password""123456"

}

先定义一个account类,属性有id、name、password、createDate。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

public class Account {

    private String id;

    private String password;

    private String name;

    private String createDate;

    public Account() {

        super();

    }

    public Account(String id, String password, String name, String createDate) {

        super();

        this.id = id;

        this.password = password;

        this.name = name;

        this.createDate = createDate;

    }

    public String getId() {

        return id;

    }

    public void setId(String id) {

        this.id = id;

    }

    public String getPassword() {

        return password;

    }

    public void setPassword(String password) {

        this.password = password;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public String getCreateDate() {

        return createDate;

    }

    public void setCreateDate(String createDate) {

        this.createDate = createDate;

    }

    @Override

    public String toString() {

        return "Account [id=" + id + ", password=" + password + ", name=" + name + ", createDate=" + createDate + "]\n\n";

    }

}

定义好这个类,就可以利用Gson生成json字符串了。

1

2

3

4

5

6

7

8

// 生成account对象

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

Account account = new Account("1""123456""传说之美", sdf.format(new Date()));

// 利用gson对象生成json字符串

Gson gson = new Gson();

String jsonString = gson.toJson(account);

        Log.i("", jsonString);

输入的log如下

 二、解析json字符串单个对象

 在上面已生成了jsonString,那如何将其解析为单个对象,很简单。

1

2

3

// 利用gson解析json字符串为单个对象

Account account1 = gson.fromJson(jsonString, Account.class);

Log.i("", account1.toString());

看看输出的log

三、生成单个对象的json数组

什么事json数组,类似下面的

1

2

3

4

5

6

7

8

9

10

11

12

13

14

[

    {

        "id""2"

        "createDate""2015-02-01 11:21:27"

        "password""123456"

        "name""传说"

    }, 

    {

        "id""2"

        "createDate""2015-02-01 11:21:27"

        "password""123456"

        "name""之美"

    }

]

生成json数组代码如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

Account account2 = new Account("2""123456""传说", sdf.format(new Date()));

Account account3 = new Account("2""123456""之美", sdf.format(new Date()));

List<Account> accountList = new ArrayList<Account>();

accountList.add(account2);

accountList.add(account3);

JSONArray accountArray = new JSONArray();

for (int i = 0; i < accountList.size(); i++) {

    String accountStr = gson.toJson(accountList.get(i));

    JSONObject accountObject;

    try {

        accountObject = new JSONObject(accountStr);

        accountArray.put(i, accountObject);

    catch (JSONException e) {

        e.printStackTrace();

    }

}

Log.i("", accountArray.toString());

log的输出为

四、由多个单个对象的json数组解析为对个单个对象

多个单个对象组成的json数组解析如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

// 解析json数组

List<Account> accountList2 = new ArrayList<Account>();

for(int i=0;i<accountArray.length(); i++){

    JSONObject jsonObject = null;

    try {

        jsonObject = accountArray.getJSONObject(i);

    catch (JSONException e) {

        e.printStackTrace();

    }

    if(jsonObject != null){

        Account tempAccount = gson.fromJson(jsonObject.toString(), Account.class);

        accountList2.add(tempAccount);

    }

}

Log.i("accountList2", accountList2.toString());

输出的log

 

或者用更快捷的转化方法

1

2

3

4

5

6

Account[] accountArrays = new Gson().fromJson(accountArray.toString(), Account[].class);

for(int i=0;i<accountArrays.length;i++){

    Log.i("accountArrays",accountArrays[i].toString());

}

// 转化为List

List<Account> foosList = Arrays.asList(accountArrays);

更快捷地解析成List

1

2

3

4

// 更快捷地解析成List

Type listType = new TypeToken<ArrayList<Account>>(){}.getType();

ArrayList<Account> accsList = new Gson().fromJson(accountArray.toString(), listType);

Log.i("accsList",accsList.toString());

五、生成一个对象嵌套对象的json

嵌套的json类似如下

1

2

3

4

5

6

7

8

9

10

{

    "member": {

        "id""4"

        "name""我是传说"

    }, 

    "id""4"

    "createDate""2015-02-02 12:03:32"

    "password""888888"

    "name""传说之美"

}

生成这个json有2种方法。

1、再添加一个member类,像添加account类一样添加即可。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

public class Member {

    private String id;

    private String name;

    public Member() {

        super();

    }

    public Member(String id, String name) {

        super();

        this.id = id;

        this.name = name;

    }

    public String getId() {

        return id;

    }

    public void setId(String id) {

        this.id = id;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    @Override

    public String toString() {

        return "Member [id=" + id + ", name=" + name + "]\n\n";

    }

}

生成代码如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

// 生成对象嵌套对象的json

Account account4 = new Account("4""888888""传说之美", sdf.format(new Date()));

Member member = new Member("4""我是传说");

String accountStr = gson.toJson(account4);

String memberStr = gson.toJson(member);

JSONObject object = null;

try {

    JSONObject memberObject = new JSONObject(memberStr);

    object = new JSONObject(accountStr);

    object.put("member", memberObject);     

catch (JSONException e) {

    e.printStackTrace();

}

Log.i("", object.toString());

输出的log

六、解析对象嵌套对象的json 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

Account account5 = gson.fromJson(object.toString(), Account.class);

Log.i("解析对象嵌套对象的json", account5.toString());

// 这里用isNull来判断是否存在这个object,存在就拿出member的JSONObject

JSONObject memberObject = null;

if(!object.isNull("member")){

    try {

        memberObject = object.getJSONObject("member");

    catch (JSONException e) {

        e.printStackTrace();

    }

}

Member member5 = null;

if(null != memberObject){

    member5 = gson.fromJson(memberObject.toString(), Member.class);

    Log.i("解析对象嵌套对象的json", member5.toString());

}

输出的结果

 7、另外一种解析对象嵌套对象的json 

定义一个类

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

public class AccountObject {

    private String id;

    private String password;

    private String name;

    private String createDate;

    private MemberObject memberObject = new MemberObject();

     

    public class MemberObject {

        private String id;

        private String name;

        @Override

        public String toString() {

            return "MemberObject [id=" + id + ", name=" + name+ "]\n\n";

        }

    }

    @Override

    public String toString() {

        return "AccountObject [id=" + id + ", password=" + password + ", name=" + name + ", createDate=" + createDate + ","+ memberObject.toString() + "]\n\n";

    }

}

生成json并解析

1

2

3

4

5

6

7

8

9

try {

    JSONObject mObject = new JSONObject(memberStr);

    object = new JSONObject(accountStr);

    object.put("memberObject", mObject);        

catch (JSONException e) {

    e.printStackTrace();

}

AccountObject accountObject = gson.fromJson(object.toString(), AccountObject.class);

Log.i("accountObject", accountObject.toString());

打印出来的log

猜你喜欢

转载自blog.csdn.net/pxcz110112/article/details/81220928