Detalhes da conversão do formato json

No desenvolvimento, muitas vezes é necessário converter o objeto Json para o formato de destino ou desserializar a string Json para o objeto de destino. Neste momento, existem alguns detalhes que precisam ser observados.

1. Envie a quebra de linha da string Json para "Console"

No desenvolvimento da lógica de negócios, às vezes é necessário enviar a string Json para o console em uma nova linha, para verificar cuidadosamente os valores de cada atributo na string, e a própria string Json é gerada continuamente, sem a beleza do "recuo de nova linha" Efeito conveniente. Se você quiser consultar o valor de uma propriedade, basta olhar com cuidado no log do console.

Portanto, a string Json é "envolvida e recuada" para a saída aqui, e o efeito semelhante ao "Format Json" no "Notepad++" após a instalação do plug-in "Json Viewer" é obtido:

Considerando que o próprio objeto já é uma "string Json", como os dados do protocolo (conteúdo em data.msg) enviados pelo servidor em alguns projetos. que a string em si não tem o efeito estético de “recuo de nova linha” , então aqui é primeiro desserializado e depois serializado novamente com a ajuda de “ Formatting.Indentedpara ter o efeito de “recuo de nova linha”

//将返回的json字符串换行输出到控制台中(便于查看)
if (request.responseCode == 200) {
	string msg = request.downloadHandler.text;
	var jsonFormat = JsonConvert.SerializeObject(JsonConvert.DeserializeObject(msg),
		Formatting.Indented);
	Debug.LogFormat("{0}", jsonFormat);
}

O formato original da string Json é o seguinte:

Depois de adicionar " Formatting.Indented ", o efeito do "recuo de nova linha" é o seguinte:

 

2. Obtenha o valor de um atributo específico na string Json

Se o atributo tiver uma estrutura relativamente simples na string Json , você poderá obter seu valor diretamente combinando a string json

//直接获取json字符串中某个属性的value
if (request.responseCode == 200) {
	string msg = request.downloadHandler.text;
	JObject jsonObject = JObject.Parse(msg);
	string id = jsonObject.GetValue("id").ToString();
	Debug.LogFormat("{0}", id);
}

Como acima, corresponda diretamente à string Json "msg" por meio de " JObject.Parse " e, em seguida, obtenha o valor de seu atributo interno "id"

O efeito é o seguinte:

 

3. Converta a string Json em um objeto do tipo de destino

Use " JsonUtility.FromJson<T>() " no Unity para converter a string Json em um objeto do tipo "T".

Neste ponto, deve-se observar que nem todos os valores de atributo na string Json devem ser correspondidos um a um no tipo "T", apenas alguns atributos de destino precisam ser correspondidos .

Por exemplo, converta a seguinte string Json:

No entanto, a estrutura de conversão real " ChatGPTResponse " não precisa conter todos os atributos na string Json

O tipo "T" "ChatGPTResponse" é o seguinte:

[System.Serializable]
public class ChatGPTResponse
{
	public string id;
	public ChoiceContent[] choices;
	/*public int created;
	public string model;*/

	[System.Serializable]
	public class ChoiceContent
	{
		public int index;
		public ContentData message;

		//public int logprobs;
		//public string finish_reason;
	}
}



[System.Serializable]
public class ContentData
{
	public string role;
	public string content;
}

/*注意:
*在将json字符串转换成实际的T对象时,并不需要将该json中的所有属性都匹配,
*只需要将需要使用的属性匹配出来即可
*/

A conversão real é a seguinte:

//将json字符串转换成指定类型对象后再获取其中的具体参数值
ChatGPTResponse response = JsonUtility.FromJson<ChatGPTResponse>(msg);
ChatGPTResponse.ChoiceContent[] contents = response.choices;
if (contents.Length > 0) {
	//去除字符串开头的”\n\n“换行符
	result = contents[0].message.content.TrimStart('\n');
	Debug.LogFormat("{0}", result);
}

A saída é a seguinte:

 PS : Para remover a quebra de linha "\n\n" na frente da string, você pode usar diretamente " string.TrimStart('\n') "

Acho que você gosta

Origin blog.csdn.net/m0_47975736/article/details/129660549
Recomendado
Clasificación