Cela fait longtemps, tout le monde à Qiita. Cela fait longtemps depuis la dernière fois, mais j'ai acheté un nouvel ordinateur depuis. Et j'en ai eu marre de Python, alors j'ai décidé d'essayer C #.
Écrivez-le sous forme de mémo pour comprendre. Veuillez pardonner les points perdus.
J'avais l'habitude d'utiliser json en Python pour stocker des fichiers de configuration et des données qui devaient être définis dans json pour plus de commodité, donc je voulais absolument l'utiliser également en C #. J'étais un peu au courant, mais je me demandais quelle était une excellente bibliothèque Python.
hoge.json
{
"hoge": "hoge1",
"hogehoge": "hoge2",
"hogehogehoge": "hoge3"
}
Le chargement de json en Python utilise la bibliothèque json
import json
def load_json(filename):
with open(filename) as files:
load = json.load(files)
return load
Si vous définissez une fonction comme celle-ci, elle reviendra en tant que type de dictionnaire.
result = load_json("hoge.json")
hoge1 = result["hoge"]
hoge2 = result["hogehoge"]
hoge3 = result["hogehogehoge"]
print(hoge1)
print(hoge2)
print(hoge3)
print(type(hoge1))
print(type(hoge2))
print(type(hoge3))
hoge1
hoge2
hoge3
<class 'str'>
<class 'str'>
<class 'str'>
Si vous faites cela, vous pouvez facilement revenir avec str ou int, vous pouvez donc facilement l'utiliser si vous le faites bouillir ou cuire au four. (Gabacode Degomen)
Pour C #
using System;
using System.IO;
using System.Text;
using System.Text.Json;
namespace ConsoleApp2
{
class Program
{
public static string ReadAllLine(string filePath, string encodingName)
{
StreamReader sr = new StreamReader(filePath, Encoding.GetEncoding(encodingName));
string allLine = sr.ReadToEnd();
sr.Close();
return allLine;
}
class hogejson
{
public string hoge { get; set; }
public string hogehoge { get; set; }
public string hogehogehoge { get; set; }
}
static void Main(string[] args)
{
string readjson = ReadAllLine("hoge.json", "utf-8");
hogejson jsonData = JsonSerializer.Deserialize<hogejson>(readjson);
string hoge = jsonData.hoge;
string hogehoge = jsonData.hogehoge;
string hogehogehoge = jsonData.hogehogehoge;
Console.WriteLine(hoge);
Console.WriteLine(hogehoge);
Console.WriteLine(hogehogehoge);
Console.WriteLine(hoge.GetType());
Console.WriteLine(hogehoge.GetType());
Console.WriteLine(hogehogehoge.GetType());
}
}
}
hoge1
hoge2
hoge3
System.String
System.String
System.String
Si vous ne l'écrivez pas comme ça, il ne se lira pas bien, mais le plus gênant personnellement est ** "Je dois créer une classe json" ** Noto ** "C'est difficile à comprendre quand je crée une méthode (une fonction en Python (bien que ce soit un peu différent))! Je me suis fait prendre.
En Python, la valeur de retour retournée par la fonction précédente doit être ** type dictionnaire **, tandis qu'en C #, ** valeur de retour spécifique ** doit être spécifiée. Pour cette raison, en Python, il revient en tant que type de dictionnaire.
hoge = result["hoge"]
Vous pouvez récupérer la valeur "hoge1" de la clé "hoge" simplement en la spécifiant dans et result. D'autre part, C # est mis à hoge de la classe "hogejson" en tant que type de chaîne (str) lorsque la valeur de "hoge" qui est la clé de "hoge.json" est "hoge1". Au contraire, si vous essayez de définir ceci avec le type int ou un autre type, vous ne pouvez pas.
En effet, la valeur de retour de la classe hoge est déterminée comme étant une chaîne. Par conséquent, comme elle n'est pas spécifiée comme valeur de retour dans le type de dictionnaire qui était souvent pris en charge en Python, même si la valeur de retour est spécifiée comme un type de dictionnaire "arbitrairement", non seulement les clés des autres "hogehoge" et "hogehogehoge" mais aussi la valeur Je n'ai même pas les informations (auto-interprétation)
Quand je l'ai cherché, il semble qu'il y ait une "classe Dictionary" en C #, donc elle peut être utilisée de la même manière que le type de dictionnaire Python.
Ensuite, l'histoire est rapide, voici le résultat d'essais et d'erreurs répétés afin que la clé et la valeur de hoge.json puissent être regroupées dans un type de dictionnaire.
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Text.Json;
namespace ConsoleApp2
{
class library
{
//Lecture de fichier
public string ReadAllLine(string filePath, string encodingName)
{
StreamReader sr = new StreamReader(filePath, Encoding.GetEncoding(encodingName));
string allLine = sr.ReadToEnd();
sr.Close();
return allLine;
}
//Convertir de force le type de liste en type de dictionnaire
public static Dictionary<string, string> ListInDictionary(string[] left, string[] right)
{
//Quand ils correspondent
if (left.Length == right.Length)
{
var result = new Dictionary<string, string>();
//Tournez pour le nombre de listes sur la gauche
for (int i = 0; i < left.Length; i++)
{
//Ajouter un dictionnaire au résultat
result.Add(left[i], right[i]);
}
return result;
}
//Quand il y a un écart
else
{
return null;
}
}
class hogejson
{
public string hoge { get; set; }
public string hogehoge { get; set; }
public string hogehogehoge { get; set; }
}
//hoge.Méthode pour charger json
public Dictionary<string, string> GetHogejson(string filename)
{
try
{
string jsonfile = ReadAllLine(filename, "utf-8");
hogejson jsonData = JsonSerializer.Deserialize<hogejson>(jsonfile);
string[] json_key = { "hoge", "hogehoge", "hogehogehoge" };
string[] json_value = { jsonData.hoge, jsonData.hogehoge, jsonData.hogehogehoge };
var result = ListInDictionary(json_key, json_value);
return result;
}
//Lorsque json ne peut pas être lu
catch (JsonException)
{
return null;
}
}
}
class Program
{
static void Main(string[] args)
{
library Library = new library();
Dictionary<string, string> gethogejson = Library.GetHogejson("hoge.json");
string hoge, hogehoge, hogehogehoge;
hoge = gethogejson["hoge"];
hogehoge = gethogejson["hogehoge"];
hogehogehoge = gethogejson["hogehogehoge"];
Console.WriteLine(hoge);
Console.WriteLine(hogehoge);
Console.WriteLine(hogehogehoge);
Console.WriteLine(hoge.GetType());
Console.WriteLine(hogehoge.GetType());
Console.WriteLine(hogehogehoge.GetType());
}
}
}
... je l'ai senti trop agressivement ...
Personnellement, je suis très reconnaissant qu'il puisse être utilisé comme Python, mais j'ai l'impression qu'il est trop agressif et en colère.
Au fait, le résultat est
hoge1
hoge2
hoge3
System.String
System.String
System.String
Il sera affiché comme ceci.
N'hésitez pas à commenter s'il y a quelque chose comme "C'est mieux que cette méthode ~~~ Trop de gabber ~~"! J'avais de sérieux ennuis, alors j'essaierai de l'améliorer si j'ai le temps.
Postscript Qu'est-ce que c'est? Il sort souvent et reste bloqué. Dans ce cas, il n'y a pas d'autre choix que de le sauvegarder et de le redémarrer, ce qui est très gênant.
Je l'ai écrit après un long moment. bonne nuit.
https://usefuledge.com/csharp-json.html https://json2csharp.com/ (Le site qui crée la classe de données json plus tôt sur la base des données json est très pratique) Thank you!!!!!
Recommended Posts