programing

C#의 Json 문자열 해석

bestprogram 2023. 3. 13. 21:09

C#의 Json 문자열 해석

C#에서 Json 문자열을 읽으려고 하는데 문자열을 C#으로 해석하는 방법만 고민하고 있습니다.다음과 같은 Json 문자열이 있다고 가정합니다.

[
    {
        "AppName": {
            "Description": "Lorem ipsum dolor sit amet",
            "Value": "1"
        },
        "AnotherAppName": {
            "Description": "consectetur adipisicing elit",
            "Value": "String"
        },
        "ThirdAppName": {
            "Description": "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua",
            "Value": "Text"
        },
        "Application": {
            "Description": "Ut enim ad minim veniam",
            "Value": "100"
        },
        "LastAppName": {
            "Description": "quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat",
            "Value": "ZZZ"
        }
    }
]

다음과 같은 형식을 사용하여 어레이 목록 또는 사전으로 해석합니다.

descriptionList["AppName"] = "Lorem ipsum dolor sit amet";
valueList["AppName"] = "1";

Json이랑 장난치고 있었어.하지만 내가 본 예들은 내가 이것을 어떻게 해야 하는지에 대한 명확한 생각을 주지 못한다.이를 실현하는 가장 좋은 방법은 무엇입니까?jQuery처럼 foreach 문을 사용하여 실행할 수 없습니까?

프로젝트에서 Json.net을 사용하고 있는데 잘 작동합니다.이 경우 다음과 같이 json을 해석할 수 있습니다.

편집: 코드를 변경하여 json 파일(어레이)을 읽을 수 있도록 했습니다.

해석할 코드:

void Main()
{
    var json = System.IO.File.ReadAllText(@"d:\test.json");

    var objects = JArray.Parse(json); // parse as array  
    foreach(JObject root in objects)
    {
        foreach(KeyValuePair<String, JToken> app in root)
        {
            var appName = app.Key;
            var description = (String)app.Value["Description"];
            var value = (String)app.Value["Value"];

            Console.WriteLine(appName);
            Console.WriteLine(description);
            Console.WriteLine(value);
            Console.WriteLine("\n");
        }
    }
}

출력:

AppName
Lorem ipsum dolor sit amet
1


AnotherAppName
consectetur adipisicing elit
String


ThirdAppName
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua
Text


Application
Ut enim ad minim veniam
100


LastAppName
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat
ZZZ

참고로 LinqPad를 사용하여 코드를 테스트할 수 있습니다. Visual Studio에서 솔루션이나 프로젝트를 만드는 것보다 더 쉽습니다.

json:
[{"ew":"vehicles","hws":["car","van","bike","plane","bus"]},{"ew":"countries","hws":["America","India","France","Japan","South Africa"]}]

c# 코드: 단일 값(예: "bike")만 사용합니다.

//res=[{"ew":"vehicles","hws":["car","van","bike","plane","bus"]},{"ew":"countries","hws":["America","India","France","Japan","South Africa"]}]

         dynamic stuff1 = Newtonsoft.Json.JsonConvert.DeserializeObject(res);
         string Text = stuff1[0].hws[2];
         Console.WriteLine(Text);

출력:

bike

로 시험해 볼 수 있다.System.Web.Script.Serialization.JavaScriptSerializer:

var json = new JavaScriptSerializer();
var data = json.Deserialize<Dictionary<string, Dictionary<string, string>>[]>(jsonStr);

배열 목록이나 사전 대신 다이내믹을 사용할 수도 있습니다.대부분의 경우, EasyHttp를 사용하고 있습니다만, 다른 프로젝트에서도 같은 작업을 할 수 있습니다.다음은 예를 제시하겠습니다.

var http = new HttpClient();
http.Request.Accept = HttpContentTypes.ApplicationJson;
var response = http.Get("url");
var body = response.DynamicBody;
Console.WriteLine("Name {0}", body.AppName.Description);
Console.WriteLine("Name {0}", body.AppName.Value);

온 NuGet: EasyHttp

사전에 역직렬화하려는 것은 실제로 JSON에 직렬화된 Javascript 객체입니다.Javascript에서는 이 오브젝트를 연관 배열로 사용할 수 있지만 JSON 표준에 관한 한 실제로는 오브젝트입니다.

따라서 표준 JSON 시리얼라이저(.net, DataContractJsonSerializer, JavascriptSerializer 등)를 오브젝트(AppName, AnotherAppName 등)로 역시리얼라이저 하는 것은 문제 없습니다만, 실제로 이것을 사전에 해석하려면 JSON보다 더 높은 시리얼라이저가 필요합니다.내가 아는 한 사전은 아무것도 없다.

이러한 예 중 하나가 모두가 사용하는 것입니다.JSON . net

외부 lib를 사용하지 않으려면 다른 해결책이 있습니다. 즉, Javascript 객체를 JSON에 시리얼화하기 전에 목록으로 변환하는 것입니다.

var myList = [];
$.each(myObj, function(key, value) { myList.push({Key:key, Value:value}) });

myList를 JSON 오브젝트로 시리얼화하면, 이 오브젝트의 시리얼화를 해제할 수 있습니다.List<KeyValuePair<string, ValueDescription>>어떤 시리얼라이저도 사용할 수 있습니다그 목록은 사전으로 변환하는 것이 매우 명백할 것이다.

주의: ValueDescription은 이 클래스입니다.

public class ValueDescription
{
    public string Description { get; set; }
    public string Value { get; set; }
}

언급URL : https://stackoverflow.com/questions/12676746/parse-json-string-in-c-sharp