Json解析流程

一、拿到了题库

分析一下可以定义的

1、序号,用来区分题目数,每个题有唯一的序号

2、题目,就是下图的Q

3、预设的回答,下图的A

Json解析流程_第1张图片

 分析完我可以知道有三个字段,分别是int index、string Q、string A。

二、把字段丢到Excel表格里

 第一行写字段,下面再写数据

Json解析流程_第2张图片

 三、通过一些工具把Excel转化成Json文件

这个是我常用的,把Excel丢进去就好    

可以看到生成的Json文件是这样的

Json解析流程_第3张图片

 看着稍微有点乱,可以用格式化工具调整一下

这是我常用的格式化工具

在线JSON校验格式化工具(Be JSON)

 Json解析流程_第4张图片

 这样就可以清晰分辨我们的题目和预设回答了,一些小调整也可以直接在这里处理

 四、改Json文件

新建一个txt文本,把刚刚生成的数据全部粘贴进文本里,并把后缀改成.json

这样就是一个合格的Json文件了

Json解析流程_第5张图片

 五、生成C#类

还是刚刚那个网站,找到Json转C#实体类,把你的Json文件丢进去他就能帮你生成一个C#类

Json解析流程_第6张图片

 在Unity里新建一个QAData类,复制这些生成的这些就好了(生成的一般都是Root,改成自己的类)。

Json解析流程_第7张图片

 六、Json解析

using Newtonsoft.Json;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.Networking;

public class Test : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(LoadJson(Application.streamingAssetsPath + "/QA.json",JsonHandle));
    }

    /// 
    /// 处理Json数据
    /// 
    void JsonHandle(string jsonData) 
    {
        Debug.Log(jsonData);
        QAData qAData = JsonConvert.DeserializeObject(jsonData);

        Debug.Log(" 共有" + qAData.QA.Count + "题");
        foreach (var item in qAData.QA)
        {
            Debug.Log(item.index); 
            Debug.Log(item.Q); 
            Debug.Log(item.A);
        }
        
    }

    /// 
    /// 读取Json数据
    /// 
    /// 
    /// 
    /// 
    IEnumerator LoadJson(string path,UnityAction action = null)
    {
        // 提取Json文件
        UnityWebRequest www = UnityWebRequest.Get(path);
        yield return www.SendWebRequest();

        if (www.result == UnityWebRequest.Result.Success)
        {
            string jsonString = www.downloadHandler.text;
            action?.Invoke(jsonString);
        }
        else
        {
            Debug.Log("读取失败");
        }
    }
}

 这样就全部拆出来了,答题系统也是一样的思路。

Json解析流程_第8张图片

 这样做的好处是,当需要外部去修改题库时也无需重新打包,直接改Json文件就好了

你可能感兴趣的:(json)