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

如何在Java中将特定格式字符串转换为JSON负载

Java字符串转指定JSON结构方案

实现步骤

要将给定的类toString格式字符串转换为目标JSON,需要完成字符串解析提取键值对、数据类型适配、添加额外字段和JSON序列化这几个核心步骤,以下是具体实现:

代码实现(以Gson为例)

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.HashMap;
import java.util.Map;

public class BeaconToJson {
    public static void main(String[] args) {
        // 原始输入字符串
        String inputStr = "iBeaconDevice{address='F1:E4:E4:AD:24:50', uniqueId='null', proximityUUID=b9407f30-f5f8-466e-aff9-25556b57fe6d, major=35823, minor=10411, rssi=-56, shuffled=false}";
        
        // 1. 剥离类名和外层大括号,提取核心键值对内容
        String content = inputStr.replaceAll("^iBeaconDevice\\{|\\}$", "");
        // 2. 分割单个键值对
        String[] keyValuePairs = content.split(", ");
        
        Map<String, Object> beaconData = new HashMap<>();
        for (String pair : keyValuePairs) {
            // 分割键与值(仅分割第一个=,避免值中出现=的情况)
            String[] keyValue = pair.split("=", 2);
            String key = keyValue[0];
            String rawValue = keyValue[1];
            
            // 处理带单引号包裹的值
            if (rawValue.startsWith("'") && rawValue.endsWith("'")) {
                rawValue = rawValue.substring(1, rawValue.length() - 1);
            }
            
            // 3. 根据字段类型适配数据格式
            switch (key) {
                case "major":
                case "minor":
                case "rssi":
                    beaconData.put(key, Integer.parseInt(rawValue));
                    break;
                case "shuffled":
                    // 按目标要求转为字符串类型,若需布尔值可改为Boolean.parseBoolean(rawValue)
                    beaconData.put(key, rawValue);
                    break;
                default:
                    // address、uniqueId、proximityUUID均为字符串类型
                    beaconData.put(key, rawValue);
            }
        }
        
        // 4. 添加timestamp字段(当前系统时间戳)
        beaconData.put("timestamp", System.currentTimeMillis());
        
        // 5. 序列化为格式化的JSON
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        String jsonResult = gson.toJson(beaconData);
        System.out.println(jsonResult);
    }
}

关键细节说明

  • 字符串解析:用正则^iBeaconDevice\\{|\\}$精准移除开头的类名和结尾的大括号,避免手动截取的误差;
  • 键值对分割:使用, 作为分隔符拆分每个字段,确保不会误分割值中包含的逗号;
  • 类型适配:针对数字类型字段(major、minor、rssi)转为整数,shuffled按目标要求保留字符串格式,其余字段直接作为字符串存储;
  • JSON序列化:借助Gson的setPrettyPrinting()生成格式化的JSON,和目标结构完全匹配。

备选方案(Jackson实现)

如果使用Jackson库,替换序列化部分即可:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

// ... 前面的字符串解析逻辑一致 ...

ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
String jsonResult = mapper.writeValueAsString(beaconData);
System.out.println(jsonResult);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:10:05