简体   繁体   English

将 JSON 转换为 plist 使用 PowerShell

[英]Convert JSON to plist use PowerShell

convert JSON to plist have many ways, The most convenient is to use commands under the apple system, or to use online generation tools, But PowerShell does not provide direct commands, I found a project in GitHub, which can be easily converted for simple JSON, But for some slightly complex JSON, there will be some problems after conversion convert JSON to plist have many ways, The most convenient is to use commands under the apple system, or to use online generation tools, But PowerShell does not provide direct commands, I found a project in GitHub, which can be easily converted for simple JSON ,但是对于一些稍微复杂的JSON,转换后会出现一些问题

project Address: https://github.com/msftrncs/PwshJSONtoPList项目地址: https://github.com/msftrncs/PwshJSONtoPList

Existing problems:存在的问题:

Some arrays were not converted correctly某些 arrays 未正确转换

I recorded a video demo https://www57.zippyshare.com/v/krihd4Y8/file.html我录制了一个视频演示https://www57.zippyshare.com/v/krihd4Y8/file.html

related files https://www57.zippyshare.com/v/84wYYTRx/file.html相关文件https://www57.zippyshare.com/v/84wYYTRx/file.html

powershell Script code: powershell 脚本代码:

. '.\ConvertTo-PList.ps1' # Put ConvertTo-PList.ps1 in the same directory
Get-Content "test.json" | ConvertFrom-Json |
ConvertTo-Plist -Indent "`t" -StateEncodingAs 'UTF-8' |
Set-Content 'Generated.plist' -Encoding 'UTF8'

test.json:测试.json:

{
  "ACPI": {
    "DSDT": {
      "Debug": false,
      "DropOEM_DSM": false,
      "Fixes": {
        "AddDTGP": false,
        "FixHPET": false,
        "FixRTC": false,
        "FixShutdown": false
      },
      "Patches": [
        {
          "Comment": "change SAT0 to SATA",
          "Disabled": false,
          "Find": "U0FUMA==",
          "Replace": "U0FUQQ=="
        },
        {
          "Comment": "change HECI to IMEI",
          "Disabled": false,
          "Find": "SEVDSQ==",
          "Replace": "SU1FSQ=="
        }
      ],
      "ReuseFFFF": false
    },
    "DropTables": [
      {
        "Signature": "DMAR"
      },
      {
        "Signature": "MATS"
      }
    ],
    "FixHeaders": true,
    "SSDT": {
      "DropOem": false,
      "Generate": {
        "CStates": true,
        "PStates": true
      }
    }
  },
  "GUI": {
    "Custom": {
      "Entries": [
        {
          "Disabled": false,
          "FullTitle": "MAC OS X",
          "Hidden": false,
          "InjectKexts": true,
          "NoCaches": true,
          "Type": "OSX",
          "Volume": "2D4A5E3A-04FC-3041-471B-8A1622089D19"
        },
        {
          "Disabled": false,
          "FullTitle": "WIN",
          "Hidden": false,
          "Type": "Windows",
          "Volume": "2BDB20A2-1E67-4AE2-753D-D85E9A410000"
        }
      ]
    },
    "Hide": [
      "Preboot",
      "Recovery",
      "BOOTX64.EFI",
      "DATA"
    ]
  },
  "KernelAndKextPatches": {
    "ForceKextsToLoad": [
      "\\System\\Library\\Extensions\\IONetworkingFamily.kext"
    ],
    "KextsToPatch": [
      {
        "Comment": "External icons patch",
        "Disabled": false,
        "Find": "RXh0ZXJuYWw=",
        "InfoPlistPatch": false,
        "Name": "AppleAHCIPort",
        "Replace": "SW50ZXJuYWw="
      },
      {
        "Comment": "Enable TRIM for SSD",
        "Disabled": false,
        "Find": "AEFQUExFIFNTRAA=",
        "InfoPlistPatch": false,
        "Name": "com.apple.iokit.IOAHCIBlockStorage",
        "Replace": "AAAAAAAAAAAAAAA="
      }
    ]
  }
}

Generated.plist:生成的.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>ACPI</key>
    <dict>
        <key>DSDT</key>
        <dict>
            <key>Debug</key>
            <false/>
            <key>DropOEM_DSM</key>
            <false/>
            <key>Fixes</key>
            <string>@{AddDTGP=False; FixHPET=False; FixRTC=False; FixShutdown=False}</string>
            <key>Patches</key>
            <string> </string>
            <key>ReuseFFFF</key>
            <false/>
        </dict>
        <key>DropTables</key>
        <array>
            <string>@{Signature=DMAR}</string>
            <string>@{Signature=MATS}</string>
        </array>
        <key>FixHeaders</key>
        <true/>
        <key>SSDT</key>
        <dict>
            <key>DropOem</key>
            <false/>
            <key>Generate</key>
            <string>@{CStates=True; PStates=True}</string>
        </dict>
    </dict>
    <key>GUI</key>
    <dict>
        <key>Custom</key>
        <dict>
            <key>Entries</key>
            <string> </string>
        </dict>
        <key>Hide</key>
        <array>
            <string>Preboot</string>
            <string>Recovery</string>
            <string>BOOTX64.EFI</string>
            <string>DATA</string>
        </array>
    </dict>
    <key>KernelAndKextPatches</key>
    <dict>
        <key>ForceKextsToLoad</key>
        <array>
            <string>\System\Library\Extensions\IONetworkingFamily.kext</string>
        </array>
        <key>KextsToPatch</key>
        <array>
            <string>@{Comment=External icons patch; Disabled=False; Find=RXh0ZXJuYWw=; InfoPlistPatch=False; Name=AppleAHCIPort; Replace=SW50ZXJuYWw=}</string>
            <string>@{Comment=Enable TRIM for SSD; Disabled=False; Find=AEFQUExFIFNTRAA=; InfoPlistPatch=False; Name=com.apple.iokit.IOAHCIBlockStorage; Replace=AAAAAAAAAAAAAAA=}</string>
        </array>
    </dict>
</dict>
</plist>

err Pic:错误图片: 在此处输入图像描述

The version I see here also has a -Depth parameter.在这里看到的版本也有一个-Depth参数。

If I use that on your json and set the Depth to 4 (or higher) with如果我在您的 json 上使用它并将深度设置为 4(或更高)

$json | ConvertFrom-Json | ConvertTo-Plist -Indent "`t" -StateEncodingAs 'UTF-8' -Depth 4

it produces this:它产生这个:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>ACPI</key>
    <dict>
        <key>DSDT</key>
        <dict>
            <key>Debug</key>
            <false/>
            <key>DropOEM_DSM</key>
            <false/>
            <key>Fixes</key>
            <dict>
                <key>AddDTGP</key>
                <false/>
                <key>FixHPET</key>
                <false/>
                <key>FixRTC</key>
                <false/>
                <key>FixShutdown</key>
                <false/>
            </dict>
            <key>Patches</key>
            <array>
                <dict>
                    <key>Comment</key>
                    <string>change SAT0 to SATA</string>
                    <key>Disabled</key>
                    <false/>
                    <key>Find</key>
                    <string>U0FUMA==</string>
                    <key>Replace</key>
                    <string>U0FUQQ==</string>
                </dict>
                <dict>
                    <key>Comment</key>
                    <string>change HECI to IMEI</string>
                    <key>Disabled</key>
                    <false/>
                    <key>Find</key>
                    <string>SEVDSQ==</string>
                    <key>Replace</key>
                    <string>SU1FSQ==</string>
                </dict>
            </array>
            <key>ReuseFFFF</key>
            <false/>
        </dict>
        <key>DropTables</key>
        <array>
            <dict>
                <key>Signature</key>
                <string>DMAR</string>
            </dict>
            <dict>
                <key>Signature</key>
                <string>MATS</string>
            </dict>
        </array>
        <key>FixHeaders</key>
        <true/>
        <key>SSDT</key>
        <dict>
            <key>DropOem</key>
            <false/>
            <key>Generate</key>
            <dict>
                <key>CStates</key>
                <true/>
                <key>PStates</key>
                <true/>
            </dict>
        </dict>
    </dict>
    <key>GUI</key>
    <dict>
        <key>Custom</key>
        <dict>
            <key>Entries</key>
            <array>
                <dict>
                    <key>Disabled</key>
                    <false/>
                    <key>FullTitle</key>
                    <string>MAC OS X</string>
                    <key>Hidden</key>
                    <false/>
                    <key>InjectKexts</key>
                    <true/>
                    <key>NoCaches</key>
                    <true/>
                    <key>Type</key>
                    <string>OSX</string>
                    <key>Volume</key>
                    <string>2D4A5E3A-04FC-3041-471B-8A1622089D19</string>
                </dict>
                <dict>
                    <key>Disabled</key>
                    <false/>
                    <key>FullTitle</key>
                    <string>WIN</string>
                    <key>Hidden</key>
                    <false/>
                    <key>Type</key>
                    <string>Windows</string>
                    <key>Volume</key>
                    <string>2BDB20A2-1E67-4AE2-753D-D85E9A410000</string>
                </dict>
            </array>
        </dict>
        <key>Hide</key>
        <array>
            <string>Preboot</string>
            <string>Recovery</string>
            <string>BOOTX64.EFI</string>
            <string>DATA</string>
        </array>
    </dict>
    <key>KernelAndKextPatches</key>
    <dict>
        <key>ForceKextsToLoad</key>
        <array>
            <string>\System\Library\Extensions\IONetworkingFamily.kext</string>
        </array>
        <key>KextsToPatch</key>
        <array>
            <dict>
                <key>Comment</key>
                <string>External icons patch</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <string>RXh0ZXJuYWw=</string>
                <key>InfoPlistPatch</key>
                <false/>
                <key>Name</key>
                <string>AppleAHCIPort</string>
                <key>Replace</key>
                <string>SW50ZXJuYWw=</string>
            </dict>
            <dict>
                <key>Comment</key>
                <string>Enable TRIM for SSD</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <string>AEFQUExFIFNTRAA=</string>
                <key>InfoPlistPatch</key>
                <false/>
                <key>Name</key>
                <string>com.apple.iokit.IOAHCIBlockStorage</string>
                <key>Replace</key>
                <string>AAAAAAAAAAAAAAA=</string>
            </dict>
        </array>
    </dict>
</dict>
</plist>

Apparently you have an older version of the script.显然你有一个旧版本的脚本。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM