json - 反转 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"
}
等等。
我可以这样做吗?
解决方案
在 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"
}
提醒一句:这仅在没有扩展与多个媒体类型相关联的情况下才有效。问题中指定的输出格式暗示了这一点。
推荐阅读
- codenameone - 检测 Codename One 应用程序是否正在运行测试
- python - 传递参数时如何调用保留引号?
- video - FileSystemWatcher 未检测到 mp4 文件
- angular - 您的应用程序将仅部署在由提供的索引或标识符指定的设备上
- javascript - Django Rest Framework - 错误请求
- vb.net - 获取当前使用指定端口号的IP地址
- android - 错误:需要 Gradle 版本 2.2。当前版本是 5.1.1
- java - 我试图将 EC 公钥从 android 导出到 iOS,最好的方法是什么?
- html - 如何将页面详细信息值添加到 SharePoint 页脚
- opencv - find4QuadCornerSubpix 与cornerSubPix