有没有办法在 Ballerina 中将
string
转换为 json
?
我发现这个 PR - 添加 jsons:parse() 方法从字符串中获取 JSON,其中说添加对解析
string
到 json
的支持,但找不到任何示例。
我尝试了以下方法:
string person = {"name":"John", "address":{"number":89, "street":"main street", "town": "Colombo"}};
json personJson = sons:parse(person);
但是它给了我一个错误:
undefined package 'jsons'
undefined function 'parse'
在 ballerina 中将
string
转换为 json
的正确方法是使用 readJson
中的 StringReader
函数。您尝试的是一种不再受支持的旧方法。
以下示例展示了如何使用
StringReader
来完成此操作。
import ballerina/io;
public function main(string... args) {
string str = "{\"name\":\"John\", \"address\":{\"number\":89, \"street\":\"main street\", \"town\":\"Colombo\"}}";
io:StringReader sr = new(str, encoding = "UTF-8");
json j = check sr.readJson();
io:println(j);
}
有关
StringReader
的更多信息可以从文档中找到 - https://ballerina.io/learn/api-docs/ballerina/io.html#StringReader
从 Ballerina swan Lake 开始,您可以使用
fromJsonString()
方法将字符串转换为 json:
string jsonStr = "{\"key\": \"value\"}";
json|error converted = jsonStr.fromJsonString();
if (converted is error) {
io:println("Error in parsing json");
} else {
io:println(converted);
}
您还可以使用
fromJsonStringWithType()
方法直接将类似 JSON 的字符串转换为用户定义的类型。这样就可以更轻松地访问类似 JSON 的字符串中的内容。
type Address record {
int number;
string street;
string town;
};
type Person record {
string name;
Address address;
};
string personString = string `{"name": "John", "address":{"number": 89, "street": "main street", "town": "Colombo"}}`;
Person person = check personString.fromJsonStringWithType();
注意:如果字符串中有很多特殊字符需要转义,我们可以使用上面的字符串模板表达式。这将提高代码的可读性