Как мне преобразовать строку json в пары ключ / значение?

Я хочу взять все пары ключ-значение после \"тегов\" в "instanceData" и сделать их пары ключ-значение в "свойствах".

У меня есть это...

{
  "id": "/subscriptions/1234abcd-ab12-12ab-12ab-abcdfghi1234/Daily_BRSDT_20161214_0000",
  "name": "Daily_BRSDT_20161214_0000",
  "type": "Microsoft.Commerce/UsageAggregate",
  "properties": {
    "subscriptionId": "1234abcd-ab12-12ab-12ab-abcdfghi1234",
    "usageStartTime": "2017-03-08T00:00:00+00:00",
    "usageEndTime": "2017-03-09T00:00:00+00:00",
    "meterName": "Standard IO - File Read Operation Units (in 10,000s)",
    "meterCategory": "Data Management",
    "unit": "10,000s",
    "instanceData": "{\"Microsoft.Resources\":{\"resourceUri\":\"/subscriptions/1234abcd-ab12-12ab-12ab-abcdfghi1234/resourceGroups/default-resource-group67/providers/Microsoft.Storage/storageAccounts/defaultstorage67\",\"location\":\"ussouthcentral\",\"tags\":{\"ProjectName\":\"default Portal\",\"billTo\":\"Technology\",\"component\":\"Persistant Storage\",\"department\":\"Technology\",\"displayName\":\"default Portal Storage Account\",\"enviornment\":\"default\",\"function\":\"Reporting\",\"matterNumber\":\"999999\",\"primaryowner\":\"john@internet.com\",\"productLine\":\"Information Components\",\"secondaryowner\":\"mary@internet.com\",\"version\":\"1.0.0.0\"}}}",
    "meterId": "12345ab-259d-4206-a6ae-12345678abcd",
    "infoFields": {},
    "quantity": 0.0004
  }
}

Я хочу этот...

{
  "id": "/subscriptions/1234abcd-ab12-12ab-12ab-abcdfghi1234/Daily_BRSDT_20161214_0000",
  "name": "Daily_BRSDT_20161214_0000",
  "type": "Microsoft.Commerce/UsageAggregate",
  "properties": {
    "subscriptionId": "1234abcd-ab12-12ab-12ab-abcdfghi1234",
    "usageStartTime": "2017-03-08T00:00:00+00:00",
    "usageEndTime": "2017-03-09T00:00:00+00:00",
    "meterName": "Standard IO - File Read Operation Units (in 10,000s)",
    "meterCategory": "Data Management",
    "unit": "10,000s",
    "instanceData": "{\"Microsoft.Resources\":{\"resourceUri\":\"/subscriptions/1234abcd-ab12-12ab-12ab-abcdfghi1234/resourceGroups/default-resource-group67/providers/Microsoft.Storage/storageAccounts/defaultstorage67\",\"location\":\"ussouthcentral\"}}",
    "ProjectName":"default Portal",
    "billTo":"Technology",
    "component":"Persistant Storage",
    "department":"Technology",
    "displayName":"default Portal Storage Account",
    "enviornment":"default",
    "function":"Reporting",
    "matterNumber":"999999",
    "primaryowner":"john@internet.com",
    "productLine":"Information Components",
    "secondaryowner":"mary@internet.com",
    "version":"1.0.0.0",
    "meterId": "12345ab-259d-4206-a6ae-12345678abcd",
    "infoFields": {},
    "quantity": 0.0004
  }
}

Есть ли простой способ конвертировать это? Я пытаюсь сделать это с RegEx без удачи.

1 ответ

Я бы порекомендовал посмотреть на что-то вроде этого:

Как я могу десериализовать JSON в простой словарь в ASP.NET?

Сериализация списка> как JSON

По сути, вам нужно будет выделить один ключ, который вы хотите проанализировать, и повторно добавить его в ваш объект JSON.

Json.NET - инструмент Newtonsoft отлично подходит для работы с JSON. http://www.newtonsoft.com/json

Самый простой способ сделать это:

  1. Преобразуйте всю строку JSON в словарь или в List<KeyValuePair<string,string>>.
  2. Возьмите бит instanceData, который вы хотите разделить, а затем проанализируйте его в другом объекте C#.
  3. Объедините оба объекта вместе, используя некоторую логику, чтобы избежать дублирования ключей.
  4. Сериализация вашего объекта обратно в JSON

Это простой способ сделать это, хотя и не самый эффективный способ.

Другие вопросы по тегам