将无效的Json转换为有效的Json(Android)?

4

我希望将无效的JSON数据转换为有效的JSON数据。我有以下这样的JSON。是否有使用Java更改它的逻辑?

 {
    name: date,
    order: 1,
    required: true,
    type: date,
    placeholder: Expense Date
}

我希望获得以下格式化的有效JSON数据:
{
    "name": "date",
    "order": "1",
    "required": "true",
    "type": "date",
    "placeholder": "Expense Date"
 }

是按照 Number 还是 String 排序?还需要一个 Boolean 类型的吗? - Amir Azizkhani
2
展示你所做的东西,这不是代码交付服务。 - Luke Garrigan
你可以很容易地使用String.split()和StringBuilder来完成它。 - Shane
遍历文件并添加缺失的 ' " '。
  1. 在 '{' 后面
  2. 在 ':' 前面
  3. 在 ':' 后面
  4. 在 ',' 前面
  5. 在 ',' 后面
  6. 在 '}' 前面
- Julius Hörger
@JuliusHörger 先生,我正在使用 Firebase Firestore,但是我收到了无效的 JSON 响应,因此我想将其转换为有效的 JSON 响应。 - demo
显示剩余6条评论
3个回答

3
我不会替你完成代码,因为你没有提供已经完成的代码,但我可以指导你如何做。 逐行迭代文件或字符串,然后实例化一个字符串生成器来添加有效的JSON格式。 在字符串生成器中添加第一个引号,然后在单行上使用line.split(':')方法获得一个数组,其中包含了该行的前半部分和后半部分。接下来将splitLine[0](前半部分)添加到字符串生成器中,添加冒号,添加该行的第二部分splitLine[1],最后添加最后的引号和逗号。重复这个过程直到处理完所有的行,你就有了有效的JSON格式。 下面是我所说的以上步骤的一个工作版本。
String inputString = "name: date, order: 1, required: true, type: date, placeholder: Expense Date";
StringBuilder validJson = new StringBuilder();
validJson.append("{");
String[] lineByLine =  inputString.split(",");
for(int i =0; i< lineByLine.length; i++){
    String[] lineSplit = lineByLine[i].split(":");
    validJson.append('"').append(lineSplit[0].trim()).append('"').append(":").append('"').append(lineSplit[1].trim()).append('"').append(i==lineByLine.length-1?"}":",");
}
String finishedJSON = validJson.toString();
System.out.println(finishedJSON);

结尾的那一部分可能看起来有点令人困惑。
i==lineByLine.length-1?"}":","

但它所做的是检查是否为JSON的最后一行,如果是,则用括号关闭它,否则放置逗号以准备下一个属性。


如果所有内容都在一个字符串中,可以通过逗号将整个字符串分割,然后迭代给定的数组以逐行处理。 - Shane
我无法使用 splitLine[0] 实现。 - demo
1
for(String keyvalue : thatBigDynamicString.split(",")) { //no split keyvalue on ':' ; } - NishanthSpShetty
你是否根据":"拆分创建了名为splitLine的变量? - Shane
@shane 我尝试了一些不同的方法......我刚开始使用split...请在这种情况下帮助我,先生...我会尝试并更新我的状态。 - demo
显示剩余5条评论

1
你可以使用replaceAll和正则表达式:
String str = "{ name: date, order: 1, required: true, type: date, placeholder: Expense Date }";

/*remove '{' and '}' for trim*/
String trim = str.substring(1, str.length() - 1).trim();

/* x:y => "x":y */
trim = trim.replaceAll("([a-zA-Z0-9]+)(\\s*\\:)", "\\\"$1\\\"$2");

/* "x":y => "x":"y" */
trim = trim.replaceAll("(\\:\\s*)([a-zA-Z0-9\\s]+)", "$1\\\"$2\\\"");

str = '{' + trim + '}';

让我检查一下,我会回复您的,先生。 - demo

-1

可以通过使用“:”拆分字符串来完成。


我该如何分割字符串?我认为这是不可能的。 - demo
1
首先,将字符串按“,”分割。然后将每个字符串按“:”分割,并取数组的第二个值。 - Md.ibrahim khalil
姓名: 日期, 订单: 1, 必填: 是, 类型: 日期, 占位符: 费用日期。这是动态的...请问如何拆分和存储? - demo
2
String[] arr=string.split(“,”); for(int i=0;i<arr.length();i++){ String[] innerarr=arr[i].split(“:”); Log.e(“++parsed_value”,innerarr[1]);} - Md.ibrahim khalil
尝试后请告诉我。 - Md.ibrahim khalil
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接