Es ist lange her, alle bei Qiita. Es ist lange her seit dem letzten Mal, aber seitdem habe ich einen neuen Computer gekauft. Und ich hatte Python satt und beschloss, C # auszuprobieren.
Schreiben Sie es als Memo auf, um es zu verstehen. Bitte verzeihen Sie die losen Punkte.
Ich habe json in Python verwendet, um Konfigurationsdateien und Daten zu speichern, die der Einfachheit halber in json definiert werden mussten, daher wollte ich es definitiv auch in C # verwenden. Ich war mir ein wenig bewusst, aber ich habe mich gefragt, was für eine großartige Bibliothek Python hat.
hoge.json
{
"hoge": "hoge1",
"hogehoge": "hoge2",
"hogehogehoge": "hoge3"
}
Das Laden von json in Python verwendet die json-Bibliothek
import json
def load_json(filename):
with open(filename) as files:
load = json.load(files)
return load
Wenn Sie eine Funktion wie diese definieren, wird sie als Wörterbuchtyp zurückgegeben.
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'>
Wenn Sie dies tun, können Sie leicht mit str oder int zurückkehren, sodass Sie es leicht verwenden können, wenn Sie es kochen oder backen. (Gabacode Degomen)
Für 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
Wenn Sie es nicht so schreiben, wird es nicht gut lesen, aber das persönlich Ärgerlichste ist ** "Ich muss eine JSON-Klasse erstellen" ** Noto ** "Es ist schwer zu verstehen, wenn ich eine Methode erstelle (eine Funktion in Python (obwohl sie etwas anders ist))! Ich wurde erwischt.
In Python muss der von der vorherigen Funktion zurückgegebene Rückgabewert ** Wörterbuchtyp ** sein, während in C # ** ein bestimmter Rückgabewert ** angegeben werden muss. Aus diesem Grund wird es in Python als Wörterbuchtyp zurückgegeben.
hoge = result["hoge"]
Sie können den Wert "hoge1" des Schlüssels "hoge" abrufen, indem Sie ihn in und result angeben. Andererseits wird C # als Zeichenfolgentyp (str) auf hoge der Klasse "hogejson" gesetzt, wenn der Wert von "hoge", der der Schlüssel von "hoge.json" ist, "hoge1" ist. Im Gegenteil, wenn Sie versuchen, dies mit dem Typ int oder einem anderen Typ festzulegen, können Sie dies nicht.
Dies liegt daran, dass der Rückgabewert der Klasse hoge als Zeichenfolge festgelegt wird. Da es sich bei dem in Python häufig verwendeten Rückgabetyp nicht um einen Rückgabewert handelt, der häufig in Python verwendet wird, werden nicht nur die Schlüssel anderer "hogehoge" und "hogehogehoge", sondern auch der Wert als Wörterbuchtyp "willkürlich" angegeben Ich habe nicht einmal die Informationen (Selbstinterpretation)
Als ich danach gesucht habe, scheint es, dass es in C # eine "Dictionary-Klasse" gibt, so dass sie auf die gleiche Weise wie der Python-Dictionary-Typ verwendet werden kann.
Dann ist die Geschichte schnell, hier ist das Ergebnis wiederholter Versuche und Irrtümer, damit der Schlüssel und der Wert von hoge.json in einen Wörterbuchtyp gepackt werden können.
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Text.Json;
namespace ConsoleApp2
{
class library
{
//Datei lesen
public string ReadAllLine(string filePath, string encodingName)
{
StreamReader sr = new StreamReader(filePath, Encoding.GetEncoding(encodingName));
string allLine = sr.ReadToEnd();
sr.Close();
return allLine;
}
//Konvertieren Sie den Listentyp zwangsweise in den Wörterbuchtyp
public static Dictionary<string, string> ListInDictionary(string[] left, string[] right)
{
//Wenn sie zusammenpassen
if (left.Length == right.Length)
{
var result = new Dictionary<string, string>();
//Wenden Sie sich an die Anzahl der Listen auf der linken Seite
for (int i = 0; i < left.Length; i++)
{
//Fügen Sie dem Ergebnis ein Wörterbuch hinzu
result.Add(left[i], right[i]);
}
return result;
}
//Wenn es eine Diskrepanz gibt
else
{
return null;
}
}
class hogejson
{
public string hoge { get; set; }
public string hogehoge { get; set; }
public string hogehogehoge { get; set; }
}
//hoge.Methode zum Laden von 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;
}
//Wenn json nicht gelesen werden kann
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());
}
}
}
... Ich fühlte es zu aggressiv ...
Persönlich bin ich sehr dankbar, dass es wie Python verwendet werden kann, aber ich finde es zu aggressiv und wütend.
Das Ergebnis ist übrigens
hoge1
hoge2
hoge3
System.String
System.String
System.String
Es wird so angezeigt.
Wenn Sie etwas wie "Dies ist besser als diese Methode ~~~ Es ist zu locker, um diese ~~ zu verwenden" finden, zögern Sie nicht, einen Kommentar abzugeben! Ich war in ernsthaften Schwierigkeiten, also werde ich versuchen, es zu verbessern, wenn ich Zeit habe.
Nachtrag Was ist das? Es kommt oft heraus und bleibt stecken. In diesem Fall bleibt nichts anderes übrig, als es zu speichern und neu zu starten, was sehr unpraktisch ist.
Ich habe es nach langer Zeit aufgeschrieben. Gute Nacht.
https://usefuledge.com/csharp-json.html https://json2csharp.com/ (Die Site, die die JSON-Datenklasse früher basierend auf den JSON-Daten erstellt, ist sehr praktisch.) Thank you!!!!!
Recommended Posts