1

我有一个包含数组的 JSON 字符串,它无法被反序列化。我想拆分,以便每次尝试崩溃时都可以访问产品列表及其代码和数量。Json 字符串返回如下:

{
  "transaction_id": "88",
  "store_id": "3",
  "cashier_id": null,
  "loyalty_account": null,
  "transaction_time": "1382027452",
  "total_amount": "99.45",
  "items": {
    "1239219274": "1",
    "3929384913": "1"
  },
  "payments": {
    "cc": "99.45"
  }
}

我希望它分为:

{
  "transaction_id": "88",
  "store_id": "3",
  "cashier_id": null,
  "loyalty_account": null,
  "transaction_time": "1382027452",
  "total_amount": "99.45"
}

{
  "1239219274":"1",
  "3929384913":"1"
}

{
  "cc": "99.45"
}  
4

2 回答 2

3

编辑:更新以反映您的编辑。

这不是一个 JSON 数组,而是一个 JSON 对象,它基本上是一个值字典

JSON 数组使用方括号[ ]进行如下序列化:

{
    "name":"Outer Object",
    "items": [
        {
            "name":"Item #1"
        },
        {
            "name":"Item #2"
        },
        {
            "name":"Item #3"
        }
    ]
}

您可能应该只花几分钟时间学习Json.NET,它将为您处理细节。

这是我如何将该字符串反序列化为对象的方法:

public class Transaction
{
    [JsonProperty("transaction_id")]
    public int Id { get; set; }

    [JsonProperty("store_id")]
    public int StoreId { get; set; }

    [JsonProperty("cashier_id")]
    public int? CashierId { get; set; }

    [JsonProperty("loyalty_account")]
    public string LoyaltyAccount { get; set; }

    [JsonProperty("transaction_time")]
    public int TransactionTime { get; set; }

    [JsonProperty("total_amount")]
    public decimal TotalAmount { get; set; }

    [JsonProperty("items")]
    public Dictionary<string, string> Items { get; set; }

    [JsonProperty("payments")]
    public Dictionary<string, string> Payments { get; set; }
}

然后我可以简单地写:

Transaction transaction = JsonConvert.DeserializeObject<Transaction>(json);
于 2013-10-17T18:35:32.060 回答
2

首先,您的 json 字符串有一个错误,您可以使用在线验证器进行验证,例如:http: //jsonlint.com/

Parse error on line 9:
...   "1239219274": "1""3929384913": "1"  
-----------------------^
Expecting '}', ':', ',', ']'

然后对于数组,它们具有以下布局:

a : [1,2,3,4,5]

并且使用 C# 你可以使用JSON.Net 如果使用 javascript 你可以使用jQueryYUI

于 2013-10-17T18:36:52.073 回答