如何在 Talend 中解析动态 JSON 模式
How to parse a dynamic JSON schema in Talend
我有一个 API returns 一个 JSON,但是相同的字段有时作为对象返回,有时作为基于可用数据的数组返回,我是使用 tExtractJsonFields 组件并且它无法处理模式中的这种变化,让我们以“stage_is”字段为例:对于一个调用 API returns this :
{
“stage_id”:[
1、
“新的”
]
}
要获取 ID,应以这种方式解析它 stage_id[0]
再打一次电话,我会得到这个:
{
“stage_id”:1
}
现在它被解析成这样:stage_id
有什么已知的方法可以处理这个问题吗?在开始使用 tSystem 组件之类的东西并使用外部工具或 bash 脚本来解决这个问题之前,我试图寻找最简单的解决方案,提前感谢你们的帮助。
因为你有一个错误的例子只是给你一个想法。
void Main()
{
//array
var j = "{\"stage_id\":[{\"id\":1,\"val\":\"New\"}]}";
Test res = JsonConvert.DeserializeObject<Test>(j).Dump();
//one rec
j = "{\"stage_id\": 1 }";
res = JsonConvert.DeserializeObject<Test>(j).Dump();
}
public class Test
{
public object stage_id {get;set;}
}
不幸的是,Talend 不处理动态 json 或者至少我不知道有任何使用本机组件的解决方案。
我建议你在解析它之前修改你的 json,这样 stage_id 总是一个数组,这样你就可以用 stage_id[0]
解析它,就像这样:
通过在 tExtractJSONFields 之前放置一个 tReplace 组件,并使用此正则表达式
(\"stage_id\"\s*:\s*)(\d+)
作为替换字符串:\[\]
这将搜索出现的 stage_id 后跟一个数字,并用方括号括起该数字。
所以,{ "stage_id":1 }
变成 { "stage_id":[1] }
如果你得到 { "stage_id":[1, "New"] }
它将不匹配正则表达式并且不会被修改。
tExtractJSONFields with stage_id[0]
然后将在两种情况下解析它。
我有一个 API returns 一个 JSON,但是相同的字段有时作为对象返回,有时作为基于可用数据的数组返回,我是使用 tExtractJsonFields 组件并且它无法处理模式中的这种变化,让我们以“stage_is”字段为例:对于一个调用 API returns this :
{ “stage_id”:[ 1、 “新的” ] }
要获取 ID,应以这种方式解析它 stage_id[0]
再打一次电话,我会得到这个:
{ “stage_id”:1 }
现在它被解析成这样:stage_id
有什么已知的方法可以处理这个问题吗?在开始使用 tSystem 组件之类的东西并使用外部工具或 bash 脚本来解决这个问题之前,我试图寻找最简单的解决方案,提前感谢你们的帮助。
因为你有一个错误的例子只是给你一个想法。
void Main()
{
//array
var j = "{\"stage_id\":[{\"id\":1,\"val\":\"New\"}]}";
Test res = JsonConvert.DeserializeObject<Test>(j).Dump();
//one rec
j = "{\"stage_id\": 1 }";
res = JsonConvert.DeserializeObject<Test>(j).Dump();
}
public class Test
{
public object stage_id {get;set;}
}
不幸的是,Talend 不处理动态 json 或者至少我不知道有任何使用本机组件的解决方案。
我建议你在解析它之前修改你的 json,这样 stage_id 总是一个数组,这样你就可以用 stage_id[0]
解析它,就像这样:
通过在 tExtractJSONFields 之前放置一个 tReplace 组件,并使用此正则表达式
(\"stage_id\"\s*:\s*)(\d+)
作为替换字符串:\[\]
这将搜索出现的 stage_id 后跟一个数字,并用方括号括起该数字。
所以,{ "stage_id":1 }
变成 { "stage_id":[1] }
如果你得到 { "stage_id":[1, "New"] }
它将不匹配正则表达式并且不会被修改。
tExtractJSONFields with stage_id[0]
然后将在两种情况下解析它。