Android Studio中如何获取PHP返回的所有JSON值并显示到TextView
解决Android Studio中仅能获取PHP返回的第一个运动限制选项的问题
看起来你遇到的核心问题是PHP返回的JSON格式不规范,导致Android端解析时只能读取到第一个对象。下面分两种场景给出解决方法:
一、推荐方案:修改PHP端输出格式(最规范)
你现在的PHP输出是多个独立的{"limitacao_motora": [...]}对象拼接在一起,这不是合法的JSON结构。正确的做法是把所有运动限制项放到一个数组里,统一返回一个JSON对象:
// 收集所有限制项到数组 $limitacoes = [ ["descricaoLimitacao" => "Wheelchair"], ["descricaoLimitacao" => "Crutches"], ["descricaoLimitacao" => "Walk short distances"], ["descricaoLimitacao" => "Only short stairs"], ["descricaoLimitacao" => "Only short stairs"] ]; // 输出合法的JSON对象 echo json_encode(["limitacao_motora" => $limitacoes]);
这样返回的JSON结构是:
{"limitacao_motora": [ {"descricaoLimitacao":"Wheelchair"}, {"descricaoLimitacao":"Crutches"}, {"descricaoLimitacao":"Walk short distances"}, {"descricaoLimitacao":"Only short stairs"}, {"descricaoLimitacao":"Only short stairs"} ]}
二、如果无法修改PHP,在Android端处理原始字符串
如果没法调整PHP代码,你需要先把拼接的多个JSON对象转换成合法的JSON数组,再进行解析:
步骤1:处理原始响应字符串
假设你从PHP拿到的原始字符串是response,先把它转换成合法的JSON数组:
// 替换对象之间的空格分隔为逗号,再包裹成数组 val processedResponse = "[" + response.replace("} {", "},{") + "]"
步骤2:解析JSON并显示到TextView
这里用Gson库为例(如果没依赖,先在build.gradle添加Gson依赖):
首先定义数据类:
data class LimitationResponse(val limitacao_motora: List<LimitationItem>) data class LimitationItem(val descricaoLimitacao: String)
然后解析并显示:
val gson = Gson() // 场景1:如果是修改PHP后的单个JSON对象 val singleResponse = gson.fromJson(processedResponse, LimitationResponse::class.java) val allLimitations = singleResponse.limitacao_motora // 场景2:如果是处理后的多个JSON对象数组 // val responses = gson.fromJson(processedResponse, Array<LimitationResponse>::class.java) // val allLimitations = responses.flatMap { it.limitacao_motora } // 方式1:把所有选项拼接成字符串显示在一个TextView yourTextView.text = allLimitations.joinToString("\n") { it.descricaoLimitacao } // 方式2:分别显示到多个TextView(假设有5个TextView) val textViews = arrayOf(textView1, textView2, textView3, textView4, textView5) allLimitations.forEachIndexed { index, item -> if (index < textViews.size) { textViews[index].text = item.descricaoLimitacao } }
为什么原来只能拿到第一个值?
因为你拿到的是多个独立的JSON对象直接拼接,不是合法的JSON数组或对象。JSON解析器读取到第一个}时就认为当前对象解析完成,所以只会返回第一个limitacao_motora的值。
内容的提问来源于stack exchange,提问作者Ana Sofia
相关产品推荐
相关产品推荐

