【问题标题】:Read and Parse JSON file but getting double braces on parsing读取和解析 JSON 文件,但在解析时得到双括号
【发布时间】:2019-07-02 07:33:30
【问题描述】:

我想读取并解析我的有效 JSON 文件。但可能是我在加载时做错了,因此没有得到有效的文件

我有一个包含有效 JSON 数据的 json 文件。但是当我使用加载它时:

 (StreamReader r = new StreamReader(filePath))
   {
     string json = r.ReadToEnd();
   }

我得到了这样的东西:

{\n \"item\": [\n  {\n   \"name\": \"Infinix smart 3 PLUS - 6.2\\\"water drop Display - Triple Rear Camera - 32GB ROM,2GB RAM-Fingerprint sensor-Face unlock\",\n   \"url\": \"https://www.daraz.pk/products/infinix-smart-3-plus-62water-drop-display-triple-rear-camera-32gb-rom-2gb-ram-20ghz-quadcore-processor-i113246358-s1264944281.html?search=1\",\n   \"price\": \"Rs. 17,999\",\n   \"Image\": \"https://static-01.daraz.pk/p/2066cca3b8cf77faa08eaeedfbe69b12.jpg_340x340q80.jpg\",\n   \"Detail\": \"Specifications of Infinix smart 3 PLUS - 6.2\\\"water drop Display - Triple Rear Camera - 32GB ROM,2GB RAM-Fingerprint sensor-Face unlock\\nBrand Infinix SKU 113246358_PK-1264944281 Model Smart 3 Plus\\nWhat’s in the box1xmobile with accessories\\nVIEW MORE\"\n  },\n  {\n   \"name\": \"Honor 7C - 5.99\\\" FHD Display - 3GB RAM - 32GB ROM - Fingerprint Sensor & Face Unlock\",\n   \"url\": \"https://www.daraz.pk/products/honor-7c-599-fhd-display-3gb-ram-32gb-rom-fingerprint-sensor-face-unlock-i3287863-s12693427.html?search=1\",\n   \"price\": \"Rs. 18,999\",\n   \"Image\": \"https://static- .........

现在我用它来解析数据

    var jobj = JObject.Parse(json);

所以我得到了这样的结果:

{ 
    {
     "item": [
  {
   "name": "Infinix smart 3 PLUS - 6.2\"water drop Display - Triple Rear Camera - 32GB ROM,2GB RAM-Fingerprint sensor-Face unlock",
   "url": "https://www.daraz.pk/products/infinix-smart-3-plus-62water-drop-display-triple-rear-camera-32gb-rom-2gb-ram-20ghz-quadcore-processor-i113246358-s1264944281.html?search=1",
   "price": "Rs. 17,999",
   "Image": "https://static-01.daraz.pk/p/2066cca3b8cf77faa08eaeedfbe69b12.jpg_340x340q80.jpg",
   "Detail": "Specifications of Infinix smart 3 PLUS - 6.2\"water drop Display - Triple Rear Camera - 32GB ROM,2GB RAM-Fingerprint sensor-Face unlock\nBrand Infinix SKU 113246358_PK-1264944281 Model Smart 3 Plus\nWhat’s in the box1xmobile with accessories\nVIEW MORE"
  },
  {
   "name": "Honor 7C - 5.99\" FHD Display - 3GB RAM - 32GB ROM - Fingerprint Sensor & Face Unlock",
   "url": "https://www.daraz.pk/products/honor-7c-599-fhd-display-3gb-ram-32gb-rom-fingerprint-sensor-face-unlock-i3287863-s12693427.html?search=1",
   "price": "Rs. 18,999",
   "Image": "https://static-01.daraz.pk/original/d73129d06b06db79072e07cd132684dd.jpg_340x340q80.jpg",
   "Detail": "Brand Warranty\nScreen: 6.0 inches,IPS LCD capacitive touchscreen,1440 x 720\nMemory: 3GB RAM, 32GB ROM\nProcessor: Octa-core (1.8 GHz Cortex-A53) Qualcomm SDM450 Snapdragon\nCamera: 13 + 2 MP Main Camera, 8 MP Selfie Camera\nBattery:Non-removable Li-Ion 3000 mAh\nOS:Android 8.1 (Oreo)\nSIM: Dual SIM (Nano-SIM, dual stand-by)\nSpecifications of Honor 7C - 5.99\" FHD Display - 3GB RAM - 32GB ROM - Fingerprint Sensor & Face Unlock\nBrand Honor SKU HO688EL0VJIZWNAFAMZ-4039820 Phone Type Smartphone Type of battery Lithium battery Resolution HD Screen Type IPS LCD Processor Type Octa-core Operating system version Android 8.0 Oreo Warranty Policy EN 1-Year Brand Warranty (Inovi Technologies) RAM Memory 3GB Operating System Android Battery Capacity 3000 - 3999 mAh Storage Capacity 32 GB Number of SIM Slots Dual Condition New Camera Front (Megapixels) 8 MP Camera Back (Megapixels) 13 MP Video Resolution 1080p Screen Size (inches) 5.6 - 6 Inch PPI 300-400 PPI Phone Features Touchscreen,GPS,Fingerprint Sensor,Expandable Memory,WiFi,NFC Network Connections GSM,3G,4G\nWhat’s in the boxPhone, Charger, USB Cable, Manual(s), Warranty Card\nVIEW MORE"
  }}

但是上面加载的 json 文件从来没有给我结果。我什至尝试过这个来解析我的模型,但它总是给我 null:

var someType = JsonConvert.DeserializeObject<RootObj>(jobj.ToString());

当我检查这个在线 JSON 验证器时: https://jsonlint.com/ 我发现我在 json 文件的开头和结尾都得到了双括号(“{{”和“}}”)。这是无效的,必须删除。 我的问题是我在哪里做错了,为什么我的 json 文件都是正确的,为什么在开始和结束时使用双花括号。

编辑: 我已经更新了我的完整 json 文件,它在结果中给出了双括号。而原始数据的开头和结尾都有 1 个花括号。

    using (StreamReader r = new StreamReader(icon_path))
    {
        string json = r.ReadToEnd();
        var jobj = JObject.Parse(json);
        List<ObjectList> items = 
   JsonConvert.DeserializeObject<List<ObjectList>>(jobj.ToString());


     }

以上是在我的模型中解析我的数据的完整行

这是我的模型类

 public class ObjectList
    {
        public string name { get; set; }
        public string url { get; set; }
        public string price { get; set; }
        public string Image { get; set; }
        public string Detail { get; set; }

     } 

【问题讨论】:

  • 如果有任何方法可以从 start 和 end 删除这些大括号,或者从 double 替换为 single 谢谢
  • 我认为这只是您用于查看jobj 内容的可视化工具的问题。尝试在Immediate Window 中输入Console.WriteLine(jobj),您将看到没有任何可视化工具“装饰”的实际JSON——不应出现额外的大括号。
  • 我的任务是使用循环在 json 中获取数据。就像我需要获取具有名称、url 和其他字段的列表
  • 我的任务是使用循环在 json 中获取数据.. - 这不是你的问题。您在问如何摆脱我怀疑是您的数据可视化器的工件的双括号。如果这是您的任务,您可以生成一个适当的类并将您的 JSON 反序列化为该类。见This answer to How do I turn a C# object into a JSON string in .NET?How to auto-generate a C# class file from a JSON object string
  • 由于您使用的是JObject,您可以简单地调用ToString() 覆盖来创建您的JSONvar jobj = JObject.Parse(json.ToString());

标签: c# json parsing read-data


【解决方案1】:

这是我一直在寻找的解决方案。感谢大家的回答。

string jsonetext = File.ReadAllText(icon_path);
Items items = JsonConvert.DeserializeObject<Items>(jsonetext);

我已经更新了我的模型类如下:

public class Daraz
{
    public string name { get; set; }
    public string url { get; set; }
    public string price { get; set; }
    public string Image { get; set; }
    public string Detail { get; set; }

}

public class Items
{
    public List<Daraz> Item { get; set; }
}

【讨论】:

    猜你喜欢
    • 2019-07-10
    • 1970-01-01
    • 2021-11-11
    • 2012-10-29
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    相关资源
    最近更新 更多