最近公司的一个项目前后端需要用json通信,有时候需要在json中再嵌套一层json。
第一次遇到这样的需求,所以这里记录一下。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Text;
using LitJson;
public class GlobalManager : MonoBehaviour
{
private string testJson = @"{ ""coupons"":[""couponTwo""],""wechat"":[""123"",""231""],""prize"":[""123""] }";
private string jsonText;
private List<string> keyList = new List<string>();
private List<string> valueList = new List<string>();
private void Start()
{
keyList.Add("coupons");
valueList.Add("couponTwo");
keyList.Add("wechat");
valueList.Add("123");
keyList.Add("prize");
valueList.Add("123");
keyList.Add("wechat");
valueList.Add("231");
jsonText = testJson.ToString();
MessageConvertJson("15", jsonText);
MessageConvertJson2(keyList, valueList);
}
/// <summary>
/// 使用字符串拼接
/// </summary>
/// <param name="id"></param>
/// <param name="content"></param>
/// <returns></returns>
private string MessageConvertJson(string id, string content)
{
Debug.Log(keyList.Count);
StringBuilder sb = new StringBuilder();
//{"type":"msg","touser":15,"room":1,"content":{ "coupons":["couponTwo"],"wechat":["123","231"],"prize":["123"] }}
sb.Append("{");
sb.Append(@"""type""");
sb.Append(":");
sb.Append(@"""msg""");
sb.Append(",");
sb.Append(@"""touser""");
sb.Append(":");
sb.Append(id);
sb.Append(",");
sb.Append(@"""room""");
sb.Append(":");
sb.Append("1");//房间号
sb.Append(",");
sb.Append(@"""content""");
sb.Append(@":");
sb.Append(content);//这里的content可以是一个json
sb.Append("}");
string jsonInfo = sb.ToString();
Debug.Log(jsonInfo);
return jsonInfo;
}
/// <summary>
/// 使用litjson
/// </summary>
/// <param name="keyList"></param>
/// <param name="valueList"></param>
/// <returns></returns>
private string MessageConvertJson2(List<string> keyList, List<string> valueList)
{
//这里本来想用字典的,但是发现不能重复添加相同的字段,所以这里采用了list来添加
JsonData jsonData = new JsonData();
JsonData content = new JsonData();
jsonData["type"] = "msg";
jsonData["touser"] = "15";
jsonData["room"] = "1";
JsonData wechat = new JsonData();
JsonData coupons = new JsonData();
JsonData prize = new JsonData();
for (int i = 0; i < keyList.Count; i++)
{
if (keyList[i] == "wechat")
{
int keyIndex = keyList.IndexOf("wechat");
wechat.Add(valueList[keyIndex]);
jsonData["wechat"] = wechat;
}
else if (keyList[i] == "coupons")
{
int keyIndex = keyList.IndexOf("coupons");
coupons.Add(valueList[keyIndex]);
jsonData["coupons"] = coupons;
}
else if (keyList[i] == "prize")
{
int keyIndex = keyList.IndexOf("prize");
prize.Add(valueList[keyIndex]);
jsonData["prize"] = prize;
}
}
string jsonInfo = jsonData.ToJson();
Debug.Log(jsonInfo);
return jsonInfo;
}
}