如何处理多个单独的 json 响应?
Posted
技术标签:
【中文标题】如何处理多个单独的 json 响应?【英文标题】:How to handle multiple individual json response? 【发布时间】:2022-01-20 04:25:50 【问题描述】:实际上,我正在做一些测试,其中我从我们的一个端点获得响应,该端点看起来像多个单独的 json 对象,我需要将它们转换为像字符串或单个 json 对象这样的形式,以便我可以执行对他们采取一些行动。
Json 响应示例:-
"user_name":"testUser","email":"test@test.com"
"country":"Australia","Gender":"Male"
"type":"Customer_Account","membership":"Annual"
这里的问题是我无法执行任何操作,直到我将它转换为某个字符串或 Json 对象。
并且无法控制来自某些第三方应用程序的响应。
任何如何使用 javascript 或 Java 转换它的想法都会有很大帮助。
【问题讨论】:
这不是一个有效的 JSON。输出应该是什么样子? 这就是问题在于它不是有效的 json,而是多个单独的有效 json。 那么预期的结果是什么? @Jakson 你能提供那个 API 吗? en.wikipedia.org/wiki/JSON_streaming 可能有用 【参考方案1】:我认为您的问题出在响应的来源上,这不是有效的 JSON。您可以在此处验证错误:https://jsonlint.com/
您是否实现了 JSON 的源代码?如果是这样,您可以将其设为对象列表...
["user_name":"testUser","email":"test@test.com",
"country":"Australia","Gender":"Male",
"type":"Customer_Account","membership":"Annual"]
如果响应的来源是外部的(不能修改),可以将响应保存为字符串,然后将字符串拆分为列表,迭代生成对象。
希望这有点帮助。
【讨论】:
是的,我尝试将其保存为字符串,但出现解析错误 这个错误会很有帮助:)【参考方案2】:用逗号将它们连接起来,
,并将结果放在括号中[]
:
[
"user_name":"testUser","email":"test@test.com",
"country":"Australia","Gender":"Male",
"type":"Customer_Account","membership":"Annual"
]
之后可以使用 JSONObject 类或者其他相关的东西
【讨论】:
他应该如何加入? 这里的问题是如何加入? @Jakson 有什么错误?给我们看 当使用它是 JS 时,它显示错误为错误:/script.js:缺少分号。它指向两个json之间缺少逗号 而在 java 中它给出了 json.parser.ParserException Unexpected token at position 18【参考方案3】:使用正则表达式拆分 JSON 并将其保存在一个数组中:
let text = '"user_name":"testUser","email":"test@test.com""country":"Australia","Gender":"Male""type":"Customer_Account","membership":"Annual"';
const myArray = text.split(/(?=[])/g);
let name = JSON.parse(myArray[0]).user_name;
console.log(myArray[0]);
console.log(name);
现在您可以将字符串解析为 JSON。
【讨论】:
我对此投了反对票。这个答案: 1)忽略了响应是行分隔的 JSON 的事实; 2)它忽略了响应可能具有嵌套对象和数组的可能方式; 3) 永远不要那样使用正则表达式。 1) 我从 OP 帖子中了解到,他得到了该响应并可以将其存储为字符串,稍后想要执行一些操作,但由于它不是 JSON 有效字符串而无法解析。 2)这是真的,我会改进答案。 3)为什么不呢?你能详细说明一下吗?【参考方案4】:如果您的对象由换行符分隔,您可以逐行读取流,并解析应该是有效 JSON 的每一行。
否则,您可以通过跟踪嵌套大括号的级别来检测对象的结尾( 增加,
减少)。
除了单独解析每个对象,您还可以插入括号和逗号以形成有效的 JSON 数组,然后解析该数组。
【讨论】:
以上是关于如何处理多个单独的 json 响应?的主要内容,如果未能解决你的问题,请参考以下文章