J S O N

本文介绍了JSON的三种基本数据格式:单个对象、多个对象的集合以及对象属性的值集合,并通过Unity3D中的示例代码展示了如何使用LitJson库进行JSON序列化和反序列化操作,用于用户登录注册和物品装备管理。
摘要由CSDN通过智能技术生成

1. JSON三种数据格式

        重点理解

        1.1 JSON中只有一个对象

{“key”:“value”}最简单的json格式 花括号包裹表示这是一个JSON对象,通过键值对进行组合 ,key:value 键和值必须用双引号包裹,{“key1”:“value1”,“key2”:“value2”…}这是具有多个键值的对象;

        1.2 JSON中有多个对象

[{“Name”:“张三”,“Age”:“18”,“Address”:“河南”},{“Name”:“李四”,“Age”:“20”,“Address”:“河北”}],一个JSON中包含多个对象,对象和对象之间用逗号隔开;

例:

using LitJson;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.UI;

/*
*创建者:
*创建时间:
*描述:
*版本:
*/
public class _3_13_2 : MonoBehaviour
{
    public InputField username, password;
    public Button btn_login, btn_register;
    // Start is called before the first frame update
    void Start()
    {
        string path = Application.dataPath + "/Json/Users.json";//JSON文件资源路径;
        //File.Create(path).Dispose();//创建完JSON文件自动释放文件流所占用的资源;
        btn_register.onClick.AddListener(Register);
        btn_login.onClick.AddListener(Login);
    }

    // Update is called once per frame
    void Update()
    {
        
    }
    void Login()
    {
        string path = Application.dataPath + "/Json/Users.json";
        string str=File.ReadAllText(path);//将序列化后的文件全部读出;
        List<User> users = JsonMapper.ToObject<List<User>>(str);//反序列化
        foreach (User user in users) 
        {
            if (user.Name.Equals(username.text)&&user.Password.Equals(password.text))
            {
                print("登陆成功");
                break;
            }
        }

    }
    public void Register()
    {
        string path = Application.dataPath + "/Json/Users.json";
        string str=File.ReadAllText(path);
        List<User> users= JsonMapper.ToObject<List<User>>(str);
        bool b = true;
        foreach (User user in users)
        {
            if (user.Name.Equals(username.text))
            {
                b = false;
                print("该用户名已注册");
                break;
            }
        }
        if (b)//若用户名尚未注册;
        {
            User user= new User();//创建新用户;
            user.Name = username.text;
            user.Password = password.text;
            users.Add(user);//将新创建的用户添加至上面反序列化后的用户集合中;
            string s= JsonMapper.ToJson(users);//将添加后的用户集合序列化并写入;
            File.WriteAllText(path, s);
        }
    }
}
public class User
{
    public string Name { get; set; }
    public string Password { get; set; }
}

        1.3 JSON中对象的某个属性的值集合/数组

在对象中,某一个属性所对应的值是一个列表/集合/数组,{“Name”:“张三”,“Age”:“18”,“Address”:“河南”,“BookList”:[{“BookName”:“js”},{“BookName”:“c#”}]}

例:

using LitJson;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.UI;

/*
*创建者:
*创建时间:
*描述:
*版本:
*/
public class _3_13_3 : MonoBehaviour
{
    public InputField playerName, equipId, equipName;
    public Button btn_select, btn_add;
    // Start is called before the first frame update
    void Start()
    {
        string path = Application.dataPath + "/Json/Bag.json";
        //File.Create(path).Dispose();
        btn_select.onClick.AddListener(Select);
        btn_add.onClick.AddListener(Add);
    }

    // Update is called once per frame
    void Update()
    {
        
    }
    void Select()
    {
        string path = Application.dataPath + "/Json/Bag.json";
        string str=File.ReadAllText(path);
        List<Player> list = JsonMapper.ToObject<List<Player>>(str);
        foreach (Player p in list)
        {
            print(p.Name);
            foreach (var item in p.Equips)
            {
                print(item.Id+"\t"+item.Name);
            }
        }
    }
    void Add()
    {
        string path = Application.dataPath + "/Json/Bag.json";
        string str = File.ReadAllText(path);
        List<Player> players=JsonMapper.ToObject<List<Player>>(str);//将原有对象全部读出;
        Player player= new Player();//创建新对象;
        player.Name = playerName.text;//玩家姓名;
        List<Equip1> equip1s= new List<Equip1>();//开辟内存,否则报空;
        Equip1 equip1= new Equip1();//创建新装备;
        equip1.Id = Convert.ToInt32(equipId.text);
        equip1.Name= equipName.text;
        equip1s.Add(equip1);//将新装备添加到装备集合中;
        player.Equips=equip1s;//将装备集合赋值给新玩家;
        players.Add(player);//将新玩家添加至玩家集合;
        string s=JsonMapper.ToJson(players);
        File.WriteAllText(path, s); 
    }
    
}

public class Equip1
{
    public int Id { get; set; }
    public string  Name { get; set; }
}
public class Player
{
    public string Name { get; set; }
    public List<Equip1> Equips { get; set; }
}

注:

1.JSON中三种格式允许互相嵌套,但顶级项只能有一个,存储数据之前按需选择以上三种格式之一

2.JSON存储数据之前需要手动给JSON文件初始化,确认顶级项

 2.JSON序列化和反序列化

        2.1 序列化

                JsonMapper.ToJson(object obj);

                obj:存储的对象(集合);

        2.2 反序列化

                JsonMapper.ToObject<T>(string str)

                T:通过泛型指定反序列化后对象类型;

                str:从JSON文件中读出的字符串;

 

    

   

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值