我试过了

$obj = [System.IO.File]::ReadLines((Convert-Path -LiteralPath names.json)) | ConvertFrom-Json
 
$keys = @() 
 
foreach ($key in $obj.GetEnumerator()) { 
  $keys += $key.Key 
} 
 
Write-Output $keys

但在超过24小时后,它还没有完成.

我需要密钥名称,这样我才能

  1. 删除不相关的信息并将其缩小
  2. 将其转换为CSV(键名称是必需的,否则PS只使用第一个对象并忽略第一个对象中不存在的键)

JSON是这个版本的一个版本(虽然小了200兆):https://kaikki.org/dictionary/All%20languages%20combined/by-pos-name/kaikki_dot_org-dictionary-all-by-pos-name.json

推荐答案

您可以流式处理文件并处理每一行,对于大文件避免了Get-Content,并最大限度地减少了cmdlet调用次数:

$allKeys = @{}

[System.IO.File]::ReadLines("names.json") | ForEach-Object {
    $obj = ConvertFrom-Json $_
    $obj.PSObject.Properties.Name | ForEach-Object {
        $allKeys[$_]= $true
    }
}

$uniqueKeys = $allKeys.Keys

Write-Output $uniqueKeys

这种方法使用.NET ReadLines方法来高效地传输文件并处理每一行.

我终于完成了您的海量JSON文件的下载.

  • 为了进一步处理JSON,下面是从每一行提取的简单"注解":
$allGlosses = @()

[System.IO.File]::ReadLines("sample.json") | ForEach-Object {
    $obj = ConvertFrom-Json $_
    $obj.senses.glosses | ForEach-Object {
        $allGlosses += $_
    }
}

Write-Output $allGlosses

这将为您提供每个JSON对象的注解列表.

反馈回复:

也许使用哈希表来存储唯一密钥,避免不必要地使用ForEach-Object,并使用完整路径进行文件访问:

$allKeys = @{}
$filePath = Resolve-Path "names.json"

foreach ($line in [System.IO.File]::ReadLines($filePath)) {
    $obj = ConvertFrom-Json $line
    foreach ($key in $obj.PSObject.Properties.Name) {
        $allKeys[$key] = $true
    }
}

$uniqueKeys = $allKeys.Keys

Write-Output $uniqueKeys

此代码避免使用+=增长数组,使用Foreach循环而不是ForEach-Object,并在.NET方法中使用它之前解析文件路径.

Json相关问答推荐

jq不会为空输入返回非零

使用Shell深入挖掘到最低的SON元素

从JSON格式提取数据时分隔通用名称

如何在Gatsby/Reaction中获取JSON-File子 node

如何使用GoFr返回XML响应?

在ConvertFrom-Json之后需要从PowerShell对象中获取数据

织女星-没有循环的动画条形图第二部分(实际上是织女星)

解析SQL中的嵌套JSON

如何将具有相同 struct 的多个JSON文件中的对象数组合并成一个数组?

jq - 将父键值提取为子元素旁边的逗号分隔值

提交后使用 Rails 7 结合 JSON 标签进行标记

PowerShell - 如何迭代 PSCustomObject 嵌套对象?

以 unicode 将 pandas DataFrame 写入 JSON

将错误消息作为 JSON 对象发送

将 Objective-C 对象序列化和反序列化为 JSON

Retrofit2.0 得到 MalformedJsonException 而 json 似乎正确?

POST:在 url 本身中发送 post 请求

可以在 SharedPreferences 中保存 JSON 数组吗?

运算符不存在:json = json

Javascript对象和JSON对象有什么区别