[PYTHON] Lesen Sie json mit C # und konvertieren Sie es in den Wörterbuchtyp (erzwungen)

Lange nicht gesehen.

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.

Über das Laden von json, dachte ich

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.

json Ladecode

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.

Warum ist das passiert

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)

Machen wir es so, dass es zum Wörterbuchtyp zurückkehrt! Lol

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 ...

Problem

  1. ** Unabhängig davon, ob der Wert vom Typ int ist oder nicht, machen Sie ihn zum Zeichenfolgentyp und speichern Sie ihn im Ergebnis (Wörterbuchtyp). ** ** **
  2. Schließlich müssen wir die Klasse der JSON-Daten angeben, damit wir keine grundlegende Lösung gefunden haben.
  3. Vorerst habe ich es mit der Idee und Weisheit, die ich mir ausgedacht habe, gewaltsam gemacht, also wurde ich wütend, als ich es sah.

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.

Schließlich

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. Screenshot_11.png

Ich habe es nach langer Zeit aufgeschrieben. Gute Nacht.

Quelle zitieren

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

Lesen Sie json mit C # und konvertieren Sie es in den Wörterbuchtyp (erzwungen)
Lesen Sie die Big-Endian-Binärdatei in Python und konvertieren Sie sie in ndarray
Lesen und schreiben Sie JSON-Dateien mit Python
So generieren Sie eine Sequenz in Python und C ++
Konvertieren Sie UTF-8-CSV-Dateien in Excel
Wie man JSON liest
Konvertieren Sie json in Excel
Konvertieren Sie Datum und Uhrzeit in Zeitzonen in Unixtime in Python2.7
Konvertieren / Zurückgeben von Klassenobjekten in das JSON-Format in Python
Konvertieren Sie den Webpay-Entitätstyp in den Dict-Typ (rekursiv in Python).
Gehen Sie in die Sprache, um Teil 7 C in der Sprache GO zu sehen und sich daran zu erinnern
C / Python> Lesen Sie den Wert fwrite () in C in Python> v0.1: 1 Wert / v0.2: 3 Werte / v0.3: entspricht size_t / v0.4: Doppelkomplextyp lesen
Tipps zum Codieren kurz und einfach in Python zu lesen
Erstellen und Verwenden von statischen / dynamischen Bibliotheken in C-Sprache
Ich habe versucht, die Zeit und die Zeit der C-Sprache zu veranschaulichen
So erhalten Sie alle Schlüssel und Werte im Wörterbuch
Ich möchte den Wörterbuchtyp in der Liste eindeutig machen
Objektorientiert in C-Sprache: "○ ✕ game" wurde überarbeitet und nach Python portiert
Bestimmen Sie das Datums- und Uhrzeitformat mit Python und konvertieren Sie es in Unixtime
Konvertieren Sie das Tweepy Status-Objekt in JSON
Konvertieren Sie Markdown in Python in PDF
So konvertieren Sie 0,5 in 1056964608 auf einmal
Reihenfolge in PyYAML beibehalten und lesen
So verpacken Sie C in Python
Python-Protokollierung und Dump an JSON
# Zeile ignorieren und mit Pandas lesen
Erstellen und lesen Sie Messagepacks in Python
Spielen Sie, um den Rennwert vorherzusagen und geben Sie den Pokemon-Namen in TensorFlow ein
Lesen Sie die CSV-Datei mit Python und konvertieren Sie sie unverändert in DataFrame
Konvertieren Sie Python> Zwei-Wert-Sequenz in Wörterbuch
So konvertieren Sie csv in tsv in CLI
Implementieren Sie den FIR-Filter in Python und C.
Binden Sie an die Klasse, um YAML zu lesen und zu schreiben
Konvertieren (komprimieren) formatierte JSON-Zeichenfolge in einzeiliges JSON
Konvertieren Sie die psd-Datei in Python in png
Konvertieren Sie Excel-Daten mit Python in JSON
Lesen Sie Python csv und exportieren Sie es nach txt
[Einführung in die Udemy Python3 + -Anwendung] 24. Wörterbuchtyp
Konvertieren Sie ein Array (struct) mit golang in json
In Python von Markdown in HTML konvertieren
Lesen von CSV-Dateien mit Pandas
Verwendung ist und == in Python
Konvertieren Sie die absolute URL in eine relative URL in Python
Bücher über Datenwissenschaft, die 2020 gelesen werden sollen
Lösen mit Ruby, Perl, Java und Python AtCoder ARC 086 C Hash-Sortierung
Ich bin süchtig nach dem Unterschied, wie Flask und Django JSON-Daten empfangen
So lesen Sie Seriennummerndateien in einer Schleife, verarbeiten sie und zeichnen sie grafisch auf
Unterschiede beim Schreiben von externem Quellcode zwischen Ruby und Python
Geben Sie Notizen zu Python-Skripten ein, um das PyTorch-Modell in C ++ mit libtorch auszuführen