Delphi XE4解析JSON

Delphi XE4解析JSON,json,parsing,delphi,Json,Parsing,Delphi,我似乎在解析JSON时遇到了一些问题,但不是所有的JSON。我从Shopify中提取数据,当我得到products.json时,它会正确解析。当我得到一个特定的产品时,我会得到一个“无效的类类型转换”错误 在DelphiXe4中使用dbxjson.pas,我正在学习如何使用它。下面的一些代码取自对前面关于一般使用JSON解析器的问题的回答 我只是将JSON放入一个memo字段,然后调用parsejson2(memo1.text),然后将结果放入memo2 我正确地获取了JSON,并通过JSON.

我似乎在解析JSON时遇到了一些问题,但不是所有的JSON。我从Shopify中提取数据,当我得到products.json时,它会正确解析。当我得到一个特定的产品时,我会得到一个“无效的类类型转换”错误

在DelphiXe4中使用dbxjson.pas,我正在学习如何使用它。下面的一些代码取自对前面关于一般使用JSON解析器的问题的回答

我只是将JSON放入一个memo字段,然后调用parsejson2(memo1.text),然后将结果放入memo2

我正确地获取了JSON,并通过JSON.parser.online.fr验证了它的正确性

以下是与我的代码一起工作的JSON输出:

{"products":[{"id":11332270357,"title":"Burton Custom Freestyle 151","body_html":"\u003cstrong\u003eGood snowboard!\u003c\/strong\u003e","vendor":"Burton","product_type":"Snowboard","created_at":"2017-07-26T12:55:21-04:00","handle":"burton-custom-freestyle-151","updated_at":"2017-07-26T12:55:21-04:00","published_at":"2017-07-26T12:55:21-04:00","template_suffix":null,"published_scope":"global","tags":"\"Big Air\", Barnes \u0026 Noble, John's Fav","variants":[{"id":48188219989,"product_id":11332270357,"title":"Default Title","price":"0.00","sku":"","position":1,"grams":0,"inventory_policy":"deny","compare_at_price":null,"fulfillment_service":"manual","inventory_management":null,"option1":"Default Title","option2":null,"option3":null,"created_at":"2017-07-26T12:55:21-04:00","updated_at":"2017-07-26T12:55:21-04:00","taxable":true,"barcode":null,"image_id":null,"inventory_quantity":1,"weight":0.0,"weight_unit":"lb","old_inventory_quantity":1,"requires_shipping":true}],"options":[{"id":13730250389,"product_id":11332270357,"name":"Title","position":1,"values":["Default Title"]}],"images":[],"image":null},{"id":11400089237,"title":"Pile of Rocks","body_html":"Wicked cool pile of rocks from Hawaii!","vendor":"test_titan","product_type":"","created_at":"2017-08-01T09:44:11-04:00","handle":"pile-of-rocks","updated_at":"2017-08-01T09:44:54-04:00","published_at":"2017-08-01T09:40:55-04:00","template_suffix":null,"published_scope":"global","tags":"","variants":[{"id":48653472149,"product_id":11400089237,"title":"pile \/ various","price":"1000.00","sku":"12345678974346547000","position":1,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"pile","option2":"various","option3":null,"created_at":"2017-08-01T09:44:11-04:00","updated_at":"2017-08-01T09:44:11-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653472213,"product_id":11400089237,"title":"pile \/ green","price":"1000.00","sku":"12345678974346547000","position":2,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"pile","option2":"green","option3":null,"created_at":"2017-08-01T09:44:11-04:00","updated_at":"2017-08-01T09:44:11-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653472277,"product_id":11400089237,"title":"pile \/ blue","price":"1000.00","sku":"12345678974346547000","position":3,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"pile","option2":"blue","option3":null,"created_at":"2017-08-01T09:44:11-04:00","updated_at":"2017-08-01T09:44:11-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653472341,"product_id":11400089237,"title":"pile \/ purple","price":"1000.00","sku":"12345678974346547000","position":4,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"pile","option2":"purple","option3":null,"created_at":"2017-08-01T09:44:11-04:00","updated_at":"2017-08-01T09:44:11-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653472405,"product_id":11400089237,"title":"pile \/ red","price":"1000.00","sku":"12345678974346547000","position":5,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"pile","option2":"red","option3":null,"created_at":"2017-08-01T09:44:11-04:00","updated_at":"2017-08-01T09:44:11-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653472469,"product_id":11400089237,"title":"hill \/ various","price":"1000.00","sku":"12345678974346547000","position":6,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"hill","option2":"various","option3":null,"created_at":"2017-08-01T09:44:11-04:00","updated_at":"2017-08-01T09:44:11-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653472533,"product_id":11400089237,"title":"hill \/ green","price":"1000.00","sku":"12345678974346547000","position":7,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"hill","option2":"green","option3":null,"created_at":"2017-08-01T09:44:11-04:00","updated_at":"2017-08-01T09:44:11-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653472597,"product_id":11400089237,"title":"hill \/ blue","price":"1000.00","sku":"12345678974346547000","position":8,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"hill","option2":"blue","option3":null,"created_at":"2017-08-01T09:44:11-04:00","updated_at":"2017-08-01T09:44:11-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653472661,"product_id":11400089237,"title":"hill \/ purple","price":"1000.00","sku":"12345678974346547000","position":9,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"hill","option2":"purple","option3":null,"created_at":"2017-08-01T09:44:11-04:00","updated_at":"2017-08-01T09:44:11-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653472725,"product_id":11400089237,"title":"hill \/ red","price":"1000.00","sku":"12345678974346547000","position":10,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"hill","option2":"red","option3":null,"created_at":"2017-08-01T09:44:11-04:00","updated_at":"2017-08-01T09:44:11-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653472789,"product_id":11400089237,"title":"mountain \/ various","price":"1000.00","sku":"12345678974346547000","position":11,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"mountain","option2":"various","option3":null,"created_at":"2017-08-01T09:44:11-04:00","updated_at":"2017-08-01T09:44:11-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653472853,"product_id":11400089237,"title":"mountain \/ green","price":"1000.00","sku":"12345678974346547000","position":12,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"mountain","option2":"green","option3":null,"created_at":"2017-08-01T09:44:12-04:00","updated_at":"2017-08-01T09:44:12-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653472917,"product_id":11400089237,"title":"mountain \/ blue","price":"1000.00","sku":"12345678974346547000","position":13,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"mountain","option2":"blue","option3":null,"created_at":"2017-08-01T09:44:12-04:00","updated_at":"2017-08-01T09:44:12-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653472981,"product_id":11400089237,"title":"mountain \/ purple","price":"1000.00","sku":"12345678974346547000","position":14,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"mountain","option2":"purple","option3":null,"created_at":"2017-08-01T09:44:12-04:00","updated_at":"2017-08-01T09:44:12-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653473045,"product_id":11400089237,"title":"mountain \/ red","price":"1000.00","sku":"12345678974346547000","position":15,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"mountain","option2":"red","option3":null,"created_at":"2017-08-01T09:44:12-04:00","updated_at":"2017-08-01T09:44:12-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true}],"options":[{"id":13812358421,"product_id":11400089237,"name":"Size","position":1,"values":["pile","hill","mountain"]},{"id":13812358485,"product_id":11400089237,"name":"Color","position":2,"values":["various","green","blue","purple","red"]}],"images":[{"id":28069860373,"product_id":11400089237,"position":1,"created_at":"2017-08-01T09:44:54-04:00","updated_at":"2017-08-01T09:44:54-04:00","width":4096,"height":2304,"src":"https:\/\/cdn.shopify.com\/s\/files\/1\/2130\/9415\/products\/20161010_173112.jpg?v=1501595094","variant_ids":[]}],"image":{"id":28069860373,"product_id":11400089237,"position":1,"created_at":"2017-08-01T09:44:54-04:00","updated_at":"2017-08-01T09:44:54-04:00","width":4096,"height":2304,"src":"https:\/\/cdn.shopify.com\/s\/files\/1\/2130\/9415\/products\/20161010_173112.jpg?v=1501595094","variant_ids":[]}},{"id":11319164053,"title":"Test Product","body_html":"This is a test product only for testing API.","vendor":"test_titan","product_type":"","created_at":"2017-07-24T16:05:00-04:00","handle":"test-product","updated_at":"2017-07-25T14:20:01-04:00","published_at":"2017-07-24T16:04:07-04:00","template_suffix":null,"published_scope":"global","tags":"","variants":[{"id":48023373269,"product_id":11319164053,"title":"Default Title","price":"10000.00","sku":"11226644","position":1,"grams":0,"inventory_policy":"deny","compare_at_price":"50.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"Default Title","option2":null,"option3":null,"created_at":"2017-07-24T16:05:00-04:00","updated_at":"2017-07-24T16:05:00-04:00","taxable":true,"barcode":"123456789","image_id":null,"inventory_quantity":20,"weight":0.0,"weight_unit":"lb","old_inventory_quantity":20,"requires_shipping":true}],"options":[{"id":13711000789,"product_id":11319164053,"name":"Title","position":1,"values":["Default Title"]}],"images":[],"image":null}]}
以下是不起作用的JSON输出:

{"product":{"id":11400089237,"title":"Pile of Rocks","body_html":"Wicked cool pile of rocks from Hawaii!","vendor":"test_titan","product_type":"","created_at":"2017-08-01T09:44:11-04:00","handle":"pile-of-rocks","updated_at":"2017-08-01T09:44:54-04:00","published_at":"2017-08-01T09:40:55-04:00","template_suffix":null,"published_scope":"global","tags":"","variants":[{"id":48653472149,"product_id":11400089237,"title":"pile \/ various","price":"1000.00","sku":"12345678974346547000","position":1,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"pile","option2":"various","option3":null,"created_at":"2017-08-01T09:44:11-04:00","updated_at":"2017-08-01T09:44:11-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653472213,"product_id":11400089237,"title":"pile \/ green","price":"1000.00","sku":"12345678974346547000","position":2,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"pile","option2":"green","option3":null,"created_at":"2017-08-01T09:44:11-04:00","updated_at":"2017-08-01T09:44:11-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653472277,"product_id":11400089237,"title":"pile \/ blue","price":"1000.00","sku":"12345678974346547000","position":3,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"pile","option2":"blue","option3":null,"created_at":"2017-08-01T09:44:11-04:00","updated_at":"2017-08-01T09:44:11-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653472341,"product_id":11400089237,"title":"pile \/ purple","price":"1000.00","sku":"12345678974346547000","position":4,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"pile","option2":"purple","option3":null,"created_at":"2017-08-01T09:44:11-04:00","updated_at":"2017-08-01T09:44:11-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653472405,"product_id":11400089237,"title":"pile \/ red","price":"1000.00","sku":"12345678974346547000","position":5,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"pile","option2":"red","option3":null,"created_at":"2017-08-01T09:44:11-04:00","updated_at":"2017-08-01T09:44:11-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653472469,"product_id":11400089237,"title":"hill \/ various","price":"1000.00","sku":"12345678974346547000","position":6,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"hill","option2":"various","option3":null,"created_at":"2017-08-01T09:44:11-04:00","updated_at":"2017-08-01T09:44:11-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653472533,"product_id":11400089237,"title":"hill \/ green","price":"1000.00","sku":"12345678974346547000","position":7,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"hill","option2":"green","option3":null,"created_at":"2017-08-01T09:44:11-04:00","updated_at":"2017-08-01T09:44:11-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653472597,"product_id":11400089237,"title":"hill \/ blue","price":"1000.00","sku":"12345678974346547000","position":8,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"hill","option2":"blue","option3":null,"created_at":"2017-08-01T09:44:11-04:00","updated_at":"2017-08-01T09:44:11-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653472661,"product_id":11400089237,"title":"hill \/ purple","price":"1000.00","sku":"12345678974346547000","position":9,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"hill","option2":"purple","option3":null,"created_at":"2017-08-01T09:44:11-04:00","updated_at":"2017-08-01T09:44:11-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653472725,"product_id":11400089237,"title":"hill \/ red","price":"1000.00","sku":"12345678974346547000","position":10,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"hill","option2":"red","option3":null,"created_at":"2017-08-01T09:44:11-04:00","updated_at":"2017-08-01T09:44:11-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653472789,"product_id":11400089237,"title":"mountain \/ various","price":"1000.00","sku":"12345678974346547000","position":11,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"mountain","option2":"various","option3":null,"created_at":"2017-08-01T09:44:11-04:00","updated_at":"2017-08-01T09:44:11-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653472853,"product_id":11400089237,"title":"mountain \/ green","price":"1000.00","sku":"12345678974346547000","position":12,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"mountain","option2":"green","option3":null,"created_at":"2017-08-01T09:44:12-04:00","updated_at":"2017-08-01T09:44:12-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653472917,"product_id":11400089237,"title":"mountain \/ blue","price":"1000.00","sku":"12345678974346547000","position":13,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"mountain","option2":"blue","option3":null,"created_at":"2017-08-01T09:44:12-04:00","updated_at":"2017-08-01T09:44:12-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653472981,"product_id":11400089237,"title":"mountain \/ purple","price":"1000.00","sku":"12345678974346547000","position":14,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"mountain","option2":"purple","option3":null,"created_at":"2017-08-01T09:44:12-04:00","updated_at":"2017-08-01T09:44:12-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true},{"id":48653473045,"product_id":11400089237,"title":"mountain \/ red","price":"1000.00","sku":"12345678974346547000","position":15,"grams":14,"inventory_policy":"deny","compare_at_price":"9999.00","fulfillment_service":"manual","inventory_management":"shopify","option1":"mountain","option2":"red","option3":null,"created_at":"2017-08-01T09:44:12-04:00","updated_at":"2017-08-01T09:44:12-04:00","taxable":true,"barcode":"44569874345654","image_id":null,"inventory_quantity":1,"weight":0.5,"weight_unit":"oz","old_inventory_quantity":1,"requires_shipping":true}],"options":[{"id":13812358421,"product_id":11400089237,"name":"Size","position":1,"values":["pile","hill","mountain"]},{"id":13812358485,"product_id":11400089237,"name":"Color","position":2,"values":["various","green","blue","purple","red"]}],"images":[{"id":28069860373,"product_id":11400089237,"position":1,"created_at":"2017-08-01T09:44:54-04:00","updated_at":"2017-08-01T09:44:54-04:00","width":4096,"height":2304,"src":"https:\/\/cdn.shopify.com\/s\/files\/1\/2130\/9415\/products\/20161010_173112.jpg?v=1501595094","variant_ids":[]}],"image":{"id":28069860373,"product_id":11400089237,"position":1,"created_at":"2017-08-01T09:44:54-04:00","updated_at":"2017-08-01T09:44:54-04:00","width":4096,"height":2304,"src":"https:\/\/cdn.shopify.com\/s\/files\/1\/2130\/9415\/products\/20161010_173112.jpg?v=1501595094","variant_ids":[]}}}
我可以看出两者之间的主要区别是方括号[],但我仍然不明白为什么它不解析第二个。非常感谢您的帮助

procedure TForm1.parsejson2(s, sKey: string);
var
  jsv   : TJsonValue;
  originalObject : TJsonObject;
  jsPair : TJsonPair;
  jsArr : TJsonArray;
  jso : TJsonObject;
  i,j : integer;
  aos : Tarray<string>;
  sValue : String;
begin
  try
    //parse json string
    jsv := TJSONObject.ParseJSONValue(s);
    try
      //value as object
      originalObject := jsv as TJsonObject;
      //get pair, wich contains Array of objects
      jspair := originalObject.Get(sKey);
      //pair value as array
      jsArr := jsPair.jsonValue as  TJsonArray;
      //enumerate objects in array
      for i := 0 to jsArr.Size - 1 do
      begin // i-th object
        try
          jso := jsArr.Get(i) as TJsonObject;
        except
        end;
        //enumerate object fields
        for jsPair in jso do
        begin
          Memo2.Lines.Add(spaces + '   '+ jsPair.JsonString.Value+ ': '+ jsPair.JsonValue.Value);
          if (jsPair.JsonValue is TJsonArray) then
          begin
            spaces := spaces + '   ';
            if (jsPair.JsonValue.ToString).Contains(':') then
            begin
              ParseJson2('{"'+jsPair.JsonString.Value+'":'+jsPair.JsonValue.ToString+'}', jsPair.JsonString.Value);
            end else begin
              aos := (jsPair.JsonValue.ToString).Split([','], 99);
              for j := low(aos) to High(aos) do
              begin
                sValue := StringReplace(aos[j], '[', '', [rfReplaceAll]);
                sValue := StringReplace(sValue, ']', '', [rfReplaceAll]);
                sValue := StringReplace(sValue, '"', '', [rfReplaceAll]);
                if trim(sValue) <> '' then Memo2.Lines.Add(spaces+spaces+sValue);
              end;
            end;
            spaces := copy(spaces,1,length(spaces)-3);
          end;
        end;
      end;
    finally
      jsv.Free();
    end;
  except
    on E: Exception do
      Memo2.Lines.Add(E.ClassName+ ': '+ E.Message);
  end;
end;
过程TForm1.parsejson2(s,sKey:string);
变量
jsv:TJsonValue;
原始对象:TJsonObject;
jsPair:TJsonPair;
jsArr:TJsonArray;
jso:TJsonObject;
i、 j:整数;
aos:焦油;
sValue:字符串;
开始
尝试
//解析json字符串
jsv:=TJSONObject.ParseJSONValue;
尝试
//作为对象的值
originalObject:=jsv作为TJsonObject;
//get对,其中包含对象数组
jspair:=originalObject.Get(sKey);
//对值作为数组
jsArr:=jsPair.jsonValue作为TJsonArray;
//枚举数组中的对象
对于i:=0到jsArr.Size-1 do
开始//第i个对象
尝试
jso:=jsArr.Get(i)作为TJsonObject;
除了
结束;
//枚举对象字段
对于jso do中的jsPair
开始
Memo2.Lines.Add(空格+''+jsPair.JsonString.Value+':'+jsPair.JsonValue.Value);
如果(jsPair.JsonValue是TJsonArray),那么
开始
空格:=空格+“”;
如果(jsPair.JsonValue.ToString).包含(“:”),则
开始
ParseJson2(“{”+jsPair.JsonString.Value+”:“+jsPair.JsonValue.ToString+”),jsPair.JsonString.Value);
结束,否则开始
aos:=(jsPair.JsonValue.ToString.Split([','],99);
对于j:=低(aos)到高(aos)do
开始
S值:=StringReplace(aos[j]、'['、'[rfReplaceAll]);
sValue:=StringReplace(sValue,']','[rfReplaceAll]);
sValue:=StringReplace(sValue,“,”[rfReplaceAll]);
如果trim(sValue)'2.行。添加(空格+空格+sValue);
结束;
结束;
空格:=副本(空格,1,长度(空格)-3);
结束;
结束;
结束;
最后
jsv.Free();
结束;
除了
关于E:Exception-do
Memo2.Lines.Add(E.ClassName+':'+E.Message);
结束;
结束;

看起来Delphi代码解析一切都很好。问题来自于您的代码。JSON中的括号不仅仅是为了显示。您得到的第一个有效结果有一个
products
值,它是一个对象数组。因此,这行代码起作用:

jsArr := jsPair.jsonValue as TJsonArray;
您得到的第二个结果不起作用,它有一个
product
值(不是
products
),它不是一个数组,而是一个单一的对象,因此当您运行该行代码时,您确实执行了一个无效的类类型转换。您需要使用
jsPair.jsonValue作为TJsonObject

如果我是你,我不会尝试用相同的代码处理这两种结果。我会将处理单个产品的代码分解出来,并将其放入自己的函数中。然后我会编写两个JSON处理函数:

  • 您可以读取显示的第一种JSON结果,并在循环中为
    products
    数组中的每个对象调用product handling函数

  • 另一个将读取您显示的第二种JSON结果,并为单个
    product
    对象调用产品处理函数


看起来Delphi代码解析一切都很好。问题来自于您的代码。JSON中的括号不仅仅是为了显示。您得到的第一个结果是一个
products
值,它是一个对象数组。因此,这行代码起作用:

jsArr := jsPair.jsonValue as TJsonArray;
您得到的第二个结果不起作用,它有一个
product
值(不是
products
),它不是一个数组,而是一个单一的对象,因此当您运行该行代码时,您确实执行了一个无效的类类型转换。您需要使用
jsPair.jsonValue作为TJsonObject

如果我是你,我不会尝试用相同的代码处理这两种结果。我会将处理单个产品的代码分解出来,并将其放入自己的函数中。然后我会编写两个JSON处理函数:

  • 您可以读取显示的第一种JSON结果,并在循环中为
    products
    数组中的每个对象调用product handling函数

  • 另一个将读取您显示的第二种JSON结果,并为单个
    product
    对象调用产品处理函数


Delphi 10.2 Tokyo成功解析JSON,所以我假设它是XE4中的一个bug。您应该使用调试器来确定它的确切位置。Delphi 10.2 Tokyo成功解析JSON,所以我假设它是XE4中的一个bug。您应该使用调试器来确定它的确切位置。谢谢各位。我想我可能需要做些什么我喜欢这样。谢谢你们。我在想我可能得做点这样的事。