C # 문자열에 JSON 데이터 읽기

c# html-agility-pack json json.net xml

문제

저는 C # Console App 프로젝트를 작업 중이며 웹 페이지에서 일부 JSON 데이터를 구문 분석하고 JSON에서 제품 가격 및 색상과 같은 특정 값을 가져 오도록 요청 받았습니다.

내 JSON 데이터, HTMLAgilityPack을 사용하여 웹 페이지에서 가져온 것. 올바른 JSON, 또 다른 질문을하기 위해 \" with " 를 대체해야했습니다. 어떻게 C #이이를 제대로 처리 할 수 ​​있습니까?

{
    "currentAsinData": {
        "Asin": "B0013NCYX4",
        "buyingPPU": "",
        "variantImages": [
            {
                "tinyImage": {
                    "HEIGHT": "70",
                    "URL": "http: //ecx.images-amazon.com/images/I/419CBUN6h8L._SL110_.jpg",
                    "WIDTH": "110"
                },
                "swatchImage": {
                    "HEIGHT": "19",
                    "URL": "http: //ecx.images-amazon.com/images/I/419CBUN6h8L._SL30_.jpg",
                    "WIDTH": "30"
                },
                "mediumImage": {
                    "HEIGHT": "168",
                    "URL": "http: //ecx.images-amazon.com/images/I/419CBUN6h8L._SX168_.jpg",
                    "WIDTH": "168"
                },
                "largeImage": {
                    "HEIGHT": "270",
                    "URL": "http: //ecx.images-amazon.com/images/I/419CBUN6h8L._SX270_.jpg",
                    "WIDTH": "270"
                },
                "thumbnailImage": {
                    "HEIGHT": "120",
                    "URL": "http: //ecx.images-amazon.com/images/I/419CBUN6h8L._SX120_.jpg",
                    "WIDTH": "120"
                }
            }
        ]
    }
}

위의 JSON은 내가 아는 한 정확합니다. 그러나 C #이 " 허용하지 않는 " 데이터를 읽을 수 없습니다. \"JArray 가 객체를 deserialize하지 못합니다.

C #에서 JSON을 처음 접했을 때 JSON.NET 라이브러리를 사용하고 있습니다. 최종 목표는 JSON을 해독하여 더 많은 사용을 위해 C # 문자열로 데이터를 검색 할 수 있습니다. 하지만 내가 어떻게 할 수 있는지에 관해서는 고민 중이다.

미리 감사드립니다!

요청 된대로 더 많은 정보.

자바 스크립트 JSON 데이터를 긁어 내 코드가 여기에 있습니다.

{
    "currentAsinData": {
        "Asin": "B0013NCYX4",
        "buyingPPU": "",
        "variantImages": [
            {
                "tinyImage": {
                    "HEIGHT": "70",
                    "URL": "http: //ecx.images-amazon.com/images/I/419CBUN6h8L._SL110_.jpg",
                    "WIDTH": "110"
                },
                "swatchImage": {
                    "HEIGHT": "19",
                    "URL": "http: //ecx.images-amazon.com/images/I/419CBUN6h8L._SL30_.jpg",
                    "WIDTH": "30"
                },
                "mediumImage": {
                    "HEIGHT": "168",
                    "URL": "http: //ecx.images-amazon.com/images/I/419CBUN6h8L._SX168_.jpg",
                    "WIDTH": "168"
                },
                "largeImage": {
                    "HEIGHT": "270",
                    "URL": "http: //ecx.images-amazon.com/images/I/419CBUN6h8L._SX270_.jpg",
                    "WIDTH": "270"
                },
                "thumbnailImage": {
                    "HEIGHT": "120",
                    "URL": "http: //ecx.images-amazon.com/images/I/419CBUN6h8L._SX120_.jpg",
                    "WIDTH": "120"
                }
            }
        ]
    }
}

웹 페이지에서 JSON을 가져오고 있습니다.

{
    "currentAsinData": {
        "Asin": "B0013NCYX4",
        "buyingPPU": "",
        "variantImages": [
            {
                "tinyImage": {
                    "HEIGHT": "70",
                    "URL": "http: //ecx.images-amazon.com/images/I/419CBUN6h8L._SL110_.jpg",
                    "WIDTH": "110"
                },
                "swatchImage": {
                    "HEIGHT": "19",
                    "URL": "http: //ecx.images-amazon.com/images/I/419CBUN6h8L._SL30_.jpg",
                    "WIDTH": "30"
                },
                "mediumImage": {
                    "HEIGHT": "168",
                    "URL": "http: //ecx.images-amazon.com/images/I/419CBUN6h8L._SX168_.jpg",
                    "WIDTH": "168"
                },
                "largeImage": {
                    "HEIGHT": "270",
                    "URL": "http: //ecx.images-amazon.com/images/I/419CBUN6h8L._SX270_.jpg",
                    "WIDTH": "270"
                },
                "thumbnailImage": {
                    "HEIGHT": "120",
                    "URL": "http: //ecx.images-amazon.com/images/I/419CBUN6h8L._SX120_.jpg",
                    "WIDTH": "120"
                }
            }
        ]
    }
}

인기 답변

여기 문제는 귀하의 자바 스크립트 스크래핑 코드가 데이터에서 후행 중괄호를 제거하여 JSON.net에 의해 JSON으로 올바르게 파싱되지 않도록하는 것이라고 생각합니다. 당신은 이것을 가지고 있습니다 :

 .Replace("};\nvar extensibilityData = {};\n\r\n//]]>//", "")

그러나 그것은 다음과 같아야합니다.

 .Replace("};\nvar extensibilityData = {};\n\r\n//]]>//", "")

올바른 JSON 문자열을 얻었 으면 다음과 같이 deserialize 할 수 있습니다.

 .Replace("};\nvar extensibilityData = {};\n\r\n//]]>//", "")

거기에서 Json.Net의 LINQ-JSON API 를 사용하여 JToken 에서 원하는 데이터를 얻을 수 있습니다. 설명서에는 특정 값을 쿼리하는 방법을 보여주는 샘플 코드 가 있습니다.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.