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

Android中,我们可以利用Gson库来生成JSON字符串。首先,我们需要定义一个类,然后使用Gson对象将其换为JSON字符串。例如,我们可以定义一个Account类,并使用Gson对象生成JSON字符串: ```java SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Account account = new Account("1", "123456", "传说之美", sdf.format(new Date())); Gson gson = new Gson(); String jsonString = gson.toJson(account); ``` 这段代码定义了一个Account类的对象,并利用Gson对象将其换为JSON字符串。最后,我们可以通过Log.i方法打印JSON字符串。 另外,如果我们需要解析JSON字符串,我们可以使用JSONObject来解析包含"{}"的部分,使用JSONArray来解析包含"[]"的部分。下面是一个示例代码: ```java private void parseJSON() { try { String strResult = "{\"UserImfo\":{\"contact\":[\"0218989\",\"1565367234\"],\"name\":\"CrazyMo_\",\"address\":{\"country\":\"CN\",\"province\":\"SH\"}}}"; JSONObject jsonObj = new JSONObject(strResult).getJSONObject("UserImfo"); JSONArray array = jsonObj.getJSONArray("contact"); String name = jsonObj.getString("name"); JSONObject address = jsonObj.getJSONObject("address"); Log.e("JSON", "姓名:" + name + "国籍:" + address.get("country") + "省份" + address.get("province")); } catch (JSONException e) { System.out.println("Json parse error"); e.printStackTrace(); } } ``` 这段代码首先将一个JSON字符串解析成JSONObject对象,然后根据键获取对应的值,包括数组和嵌套的JSONObject。最后,我们可以通过Log.e方法打印解析结果。 总之,Android中可以使用以上方法来操作JSON字符串。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Amdroid示例:利用Gson生成或解析json](https://blog.csdn.net/weixin_30947043/article/details/96353768)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Android入门——数据解析之创建及使用JSON字符串(一)](https://blog.csdn.net/CrazyMo_/article/details/78297201)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值