【发布时间】:2019-04-07 14:01:57
【问题描述】:
我得到了一个包含 ID 和 Json 数据的 CSV 文件。我需要将数据解析为 CustomerData 类。
但是,我在访问给定键的值时遇到问题
我得到了这个 CSV 文件。 Json 可能在某些记录中包含一些键,而在其他记录中可能不存在。基本上只存在已更新的字段。
ID;CHANGES
713422;[{"key":"zipCode","updatedValue":""},,{"key":"language","updatedValue":"EN"},{"key":"coaddress","updatedValue":""},{"key":"SSN","updatedValue":""},{"key":"msisdn","updatedValue":"1114455789"}]
114365;[{"key":"city","previousValue":"New York","updatedValue":"Palm City"},{"key":"zipcode","previousValue":"100012","updatedValue":"02118"},{"key":"coaddress","updatedValue":""},{"key":"streetaddress","previousValue":"9253 Del Monte Road"updatedValue":"90 Kent Ave"},{"key":"SSN","updatedValue":""},{"key":"companyName","previousValue":"Nutrics","updatedValue":"NutriTiger"}]
114365;[{"key":"zipCode","updatedValue":""},{"key":"coaddress","updatedValue":""},{"key":"SSN","updatedValue":""},{"key":"companyName","previousValue":"NutriTiger","updatedValue":"Nutri-Tiger"}]
713422;[{"key":"zipCode","updatedValue":""},{"key":"coaddress","updatedValue":"Roady Road"},{"key":"SSN","updatedValue":""},{"key":"msisdn","updatedValue":""}]
我想做的是这样的。 Json 数据中可能出现 8 个键,我需要检查它是否存在,如果存在则获取值。
$city
if (TryParse(Json.city.GetValue, $city )
{
CustomerData.$city = Json.city.GetValue
}
这就是我现在的样子。我被困在 If 语句中,我尝试以不同的方式访问 $jsondata。 我试过了 $jsonData.city $jSonData.getValue('city') 不同类型的管道 $jsonData 并做选择
但我似乎无法获得给定键的值。
我最终需要的是构建一个新的 CSV 文件,在其中搜索 ID,然后更新给定字段,例如城市(如果已更新)。
class CustomerData
{
[int]$Id = 0
[string]$companyName = ""
[string]$ssn = ""
[string]$msisdn = ""
[string]$language = ""
[string]$city = ""
[string]$coaddress = ""
[string]$streetaddress = ""
[string]$zipCode = ""
}
$inputdata = ".\Testdata.csv"
$iso8859_1 = [System.Text.Encoding]::GetEncoding('ISO-8859-1')
$reader = New-Object -TypeName System.IO.StreamReader($inputdata, $iso8859_1)
[int]$counter = 0
while ($line = $reader.ReadLine() )
{
if ($counter -gt 0)
{
$lines_split = $line.Split(';')
CustomerData.$Id = $lines[0]
$jsondata = ConvertFrom-Json $lines[1]
}
$counter++;
}
$reader.Close()
【问题讨论】:
-
看起来像是 jmespath 的工作 - 你试过使用它吗?
-
感谢您的提示!我不能为此使用它,但我一定会检查一下。工具箱里的东西看起来很不错。
标签: json powershell parsing