首页 > 解决方案 > 反转 JSON 文件

问题描述

我有一个像这样的 MIME 类型的 JSON 文件:

{
    "video/quicktime": ["mov", "qt"],
    "video/vnd.dece.hd": ["uvh", "uvvh"],
    "video/vnd.dece.mobile": ["uvm", "uvvm"],
    "video/vnd.dece.pd": ["uvp", "uvvp"],
    "video/vnd.dece.sd": ["uvs", "uvvs"],
    "video/vnd.dece.video": ["uvv", "uvvv"],
    "video/vnd.dvb.file": ["dvb"],
    "video/vnd.fvt": ["fvt"],
    "video/vnd.mpegurl": ["m4u", "mxu"],
    "video/vnd.ms-playready.media.pyv": ["pyv"],
    "video/vnd.uvvu.mp4": ["uvu", "uvvu"],
}

它持续了 800 行,所以手工不是一个选择。

我现在需要将此数组反转为

{
    "mov": "video/quicktime",
    "qt": "video/quicktime",
    "uvh": "video/dece.hd"

}

等等。

我可以这样做吗?

标签: json

解决方案


在 C# 中尝试这个小程序:

using Newtonsoft.Json;
using System;
using System.Collections.Generic;

namespace ReverseJson
{
    class Program
    {
        static void Main(string[] args)
        {
            string jsonText = @"{
                    'video/quicktime': ['mov', 'qt'],
                    'video/vnd.dece.hd': ['uvh', 'uvvh'],
                    'video/vnd.dece.mobile': ['uvm', 'uvvm'],
                    'video/vnd.dece.pd': ['uvp', 'uvvp'],
                    'video/vnd.dece.sd': ['uvs', 'uvvs'],
                    'video/vnd.dece.video': ['uvv', 'uvvv'],
                    'video/vnd.dvb.file': ['dvb'],
                    'video/vnd.fvt': ['fvt'],
                    'video/vnd.mpegurl': ['m4u', 'mxu'],
                    'video/vnd.ms-playready.media.pyv': ['pyv'],
                    'video/vnd.uvvu.mp4': ['uvu', 'uvvu'],
                }";
            
            var json = JsonConvert.DeserializeObject<dynamic>(jsonText);

            var dict = new Dictionary<string, string>();
            foreach (var item in json)
            {
                string media = item.Name;
                foreach (var extension in item.Value)
                {
                    string ext = extension.Value;
                    if (!dict.ContainsKey(ext))
                    {
                        dict.Add(ext, media);
                    }
                }
            }

            Console.Write(JsonConvert.SerializeObject(dict,Formatting.Indented));
        }
    }
}

输出:

{
  "mov": "video/quicktime",
  "qt": "video/quicktime",
  "uvh": "video/vnd.dece.hd",
  "uvvh": "video/vnd.dece.hd",
  "uvm": "video/vnd.dece.mobile",
  "uvvm": "video/vnd.dece.mobile",
  "uvp": "video/vnd.dece.pd",
  "uvvp": "video/vnd.dece.pd",
  "uvs": "video/vnd.dece.sd",
  "uvvs": "video/vnd.dece.sd",
  "uvv": "video/vnd.dece.video",
  "uvvv": "video/vnd.dece.video",
  "dvb": "video/vnd.dvb.file",
  "fvt": "video/vnd.fvt",
  "m4u": "video/vnd.mpegurl",
  "mxu": "video/vnd.mpegurl",
  "pyv": "video/vnd.ms-playready.media.pyv",
  "uvu": "video/vnd.uvvu.mp4",
  "uvvu": "video/vnd.uvvu.mp4"
}

提醒一句:这仅在没有扩展与多个媒体类型相关联的情况下才有效。问题中指定的输出格式暗示了这一点。


推荐阅读