You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Kotlin中如何将指定字符串转换为JSON?

解决方法

首先,你提供的输入字符串并非合法JSON格式,存在两处关键语法错误:

  • 用方括号[]定义键值对对象(JSON规范要求对象用大括号{})
  • 试图在数组(外层[])中存储键值对(数组仅支持有序元素,键值对应使用对象{})

修正后的合法JSON结构

正确的结构应该是一个顶层对象,将数字作为字符串键,套餐信息作为对应值:

{
  "1": {"price":100, "dataAmount":0.5},
  "3": {"price":300, "dataAmount":1},
  "5": {"price":500, "dataAmount":2},
  "7": {"price":700, "dataAmount":3},
  "10": {"price":1000, "dataAmount":5},
  "31": {"price":3100, "dataAmount":15},
  "365": {"price":36000, "dataAmount":1024},
  "39": {"price":3900, "dataAmount":20, "daysValid":31},
  "93": {"price":9000, "dataAmount":150}
}

使用Java JSONObject的具体实现方案

假设你使用的是org.json库,步骤如下:

1. 修正原字符串格式

通过字符串替换修复语法错误:

String rawInput = "[1:[\"price\":100, \"dataAmount\":0.5], 3:[\"price\":300, \"dataAmount\":1], 5:[\"price\":500, \"dataAmount\":2], 7:[\"price\":700, \"dataAmount\":3], 10:[\"price\":1000, \"dataAmount\":5], 31:[\"price\":3100, \"dataAmount\":15], 365:[\"price\":36000, \"dataAmount\":1024], 39:[\"price\":3900, \"dataAmount\":20, \"daysValid\":31], 93:[\"price\":9000, \"dataAmount\":150]]";

// 替换外层数组为对象
String fixedInput = rawInput.replaceFirst("^\\[", "{").replaceFirst("\\]$", "}");
// 替换每个套餐的数组为对象,并给数字键加引号
fixedInput = fixedInput.replaceAll("(\\d+):\\[", "\"$1\":{");
// 替换套餐对象的结束括号
fixedInput = fixedInput.replaceAll("\\],", "},");
fixedInput = fixedInput.replaceAll("\\]$", "}");

2. 解析为JSONObject

将修正后的字符串解析为JSONObject并使用:

import org.json.JSONObject;
import org.json.JSONException;

public class JsonParser {
    public static void main(String[] args) {
        String rawInput = "[1:[\"price\":100, \"dataAmount\":0.5], 3:[\"price\":300, \"dataAmount\":1], 5:[\"price\":500, \"dataAmount\":2], 7:[\"price\":700, \"dataAmount\":3], 10:[\"price\":1000, \"dataAmount\":5], 31:[\"price\":3100, \"dataAmount\":15], 365:[\"price\":36000, \"dataAmount\":1024], 39:[\"price\":3900, \"dataAmount\":20, \"daysValid\":31], 93:[\"price\":9000, \"dataAmount\":150]]";
        
        // 格式修正
        String fixedInput = rawInput.replaceFirst("^\\[", "{")
                                    .replaceFirst("\\]$", "}")
                                    .replaceAll("(\\d+):\\[", "\"$1\":{")
                                    .replaceAll("\\],", "},")
                                    .replaceAll("\\]$", "}");
        
        try {
            JSONObject result = new JSONObject(fixedInput);
            // 示例:获取键为"39"的套餐信息
            JSONObject package39 = result.getJSONObject("39");
            System.out.println("39天套餐价格:" + package39.getInt("price"));
            // 输出格式化后的JSON
            System.out.println(result.toString(2));
        } catch (JSONException e) {
            e.printStackTrace();
            // 处理格式异常
        }
    }
}

3. 依赖引入

如果使用Maven,需在pom.xml中添加org.json依赖:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20240303</version>
</dependency>

内容的提问来源于stack exchange,提问作者Marcin Stolarski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 23:50:35