大佬救命,怎么用取出这种格式的数据?

EMMetadata{data={mail=123456@qq.com, phone=123456, avatarurl=http://123456, nickname=王者荣耀}}

希望可以java或者其他语言,换成为Map或者json。例如:

{"data":{"mail":"123456@qq.com", "phone":"123456", "avatarurl":"http://123456", "nickname":"王者荣耀"}

我思考了很长时间都没有结果,正则表达式似乎很难适应

这是Dart的代码参考,这种正则表达式很难匹配到所有数据

  static Map JsonConvertUser(String text) {
    String string = text.replaceAll("EMMetadata{data=", '').replaceAll("=", ':');
    string = string.substring(0, string.length - 1);
    final string2 = string.replaceAll("\"", "");
    final quotedString =
    string2.replaceAllMapped(RegExp(r'\b\w+\b|[\u4e00-\u9fa5]+'), (match) {
      return '"${match.group(0)}"';
    });
    final decoded = json.decode(quotedString);
    return decoded;
  }
阅读 1.7k
2 个回答

来一个最笨的方法

    @Test
    void testDate1() {
        Map<String, Object> data = new HashMap<>();
        Map<String, Object> map = new HashMap<>();
        String str = "EMMetadata{data={mail=123456@qq.com, phone=123456, avatarurl=http://123456, nickname=王者荣耀}}";
        String str1 = str.replaceFirst("EMMetadata\\{data=\\{", "").replaceFirst("}}", "");
        String [] str2 = str1.split(",");
        for (String str3 : str2) {
            String [] str4 = str3.split("=");
            String key = str4[0];
            String val = str4[1];
            map.put(key, val);
        }
        data.put("data", map);
        System.out.println(JSON.get(data));
    }
  1. 感觉这个不是数据传输用的格式,更像是某种toString
  2. 数据传输还是用正经的数据传输格式为好
  3. 正则扣就完事了,反正遇到特殊字符都取不了
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题