json.parseobject,是將json字串轉化為相應的物件;json.tojsonstring則是將物件轉化為json字串。在前後臺的傳輸過程中,json字串是相當常用的
需要注意的幾個問題:
對json的校驗:主要是符號的匹配;
格式化預處理:去除鍵值對之間的空白字元;
格式化:主要是縮排的問題,要符合json通常展示的格式。
解決的辦法:
針對a問題:
可以採用棧去匹配符號,大括號、中括號、雙引號等。
針對b問題:
可以用fastjson的jsonobject.tostring()方法實現,自動去除鍵值對之間的空白字元。
針對c問題:
在需要換行的地方追加\n,縮排的地方追加\t。通過控制追加的\t的個數從而控制縮排量。
具體實現:
package demo;
import com.alibaba.fastjson.jsonexception;
import com.alibaba.fastjson.jsonobject;
/** *@author zbx
* * 將json字串新增 換行符和製表符使其能夠直接在網頁上按照通常的json格式顯示
* */
public
class
jsonformatutil ";
private
final string comma = ",";
private
final string line_break = "\n";
private
final string tab = "\t";
public
jsonformatutil(string src)
public string format() throws jsonexceptioncatch (jsonexception e)
return format(src);
}private string format(string src)
if (bracket_left.equals(string.valueof(srcarray[index]))) //[
if (bracket_right.equals(string.valueof(srcarray[index]))) //]
if (comma.equals(string.valueof(srcarray[index]))) //,
}return result.tostring();
}//追加換行符和 確定長度的製表符
stringbuffer temp = new stringbuffer();
return temp.tostring();
}return line_break;
}stringbuffer temp = new stringbuffer();
for (int i = 0; i < tabtimes; i++)
return temp.tostring();
}public
static
void
main(string args)
}
如果把這個放在web專案裡面,然後別人就可以根據api協議以get或者post請求的方式來呼叫你的json格式化工具啦~~
不足:沒有對a問題進行實現,只是簡單的借用了fastjson的jsonobject.parseobject()方法。
這個格式化工具最難的地方也是在這裡,需要用棧來匹配符號,這就要求對json格式有比較清晰地了解。
版本二 ——————————————-
由於上面的需要引用阿里巴巴的jar包 特有版本二
package demo;
/**
* 該類提供格式化json字串的方法。
* 該類的方法formatjson將json字串格式化,方便檢視json資料。
* 例如:
* json字串:["yht","xzj","zwy"]
* 格式化為:
* [
* "yht",
* "xzj",
* "zwy"
* ]
* * 使用演算法如下:
* 對輸入字串,追個字元的遍歷
* 1、獲取當前字元。
* 2、如果當前字元是前方括號、前花括號做如下處理:
* (1)如果前面還有字元,並且字元為「:」,列印:換行和縮排字元字串。
* (2)列印:當前字元。
* (3)前方括號、前花括號,的後面必須換行。列印:換行。
* (4)每出現一次前方括號、前花括號;縮排次數增加一次。列印:新行縮排。
* (5)進行下一次迴圈。
* 3、如果當前字元是後方括號、後花括號做如下處理:
* (1)後方括號、後花括號,的前面必須換行。列印:換行。
* (2)每出現一次後方括號、後花括號;縮排次數減少一次。列印:縮排。
* (3)列印:當前字元。
* (4)如果當前字元後面還有字元,並且字元不為「,」,列印:換行。
* (5)繼續下一次迴圈。
* 4、如果當前字元是逗號。逗號後面換行,並縮排,不改變縮排次數。
* 5、列印:當前字元。
* *@author yanghaitao
*@version [版本號, 2023年9月29日]
*/public
class
jsonutil
//(2)列印:當前字元。
//(3)前方括號、前花括號,的後面必須換行。列印:換行。
//(4)每出現一次前方括號、前花括號;縮排次數增加一次。列印:新行縮排。
number++;
//(5)進行下一次迴圈。
continue;
} //3、如果當前字元是後方括號、後花括號做如下處理:
if((key == ']') || (key == '}') )
//(5)繼續下一次迴圈。
continue;
} //4、如果當前字元是逗號。逗號後面換行,並縮排,不改變縮排次數。
if((key == ','))
//5、列印:當前字元。
} return result.tostring();
} /**
* 返回指定次數的縮排字串。每一次縮排三個空格,即space。
* *@param number 縮排次數。
*@return 指定縮排次數的字串。
*/private string indent(int number)
return result.tostring();
} public
static
void
main(string args) ,,,,,,,],\"html\":\"\",\"mailno\":\"71***xx624\",\"exptextname\":\"圓通快遞\",\"expspellname\":\"yuantong\",\"update\":\"1375155719\",\"cache\":\"33196560\",\"ord\":\"desc\"}";
system.out.println(tool.formatjson(toformat));
}}
匯入了json的jar包
json和json物件的相互轉換
j a物件轉為json資料 步驟 writevalue 引數,obj 引數為file 將obj 物件轉換為json字串,並儲存到指定的檔案中 引數為 writer 將obj物件轉換為json字串,並將 json 資料填充到字元輸出流中 引數為 outputstream 將 obj 對選哪個轉換為js...
Python物件和JSON物件的相互轉化
coding utf 8 import json 一 python物件和json字串可以相互轉化 1.python物件轉化成json student print repr json.dumps student 把json字串轉化成python物件 s print json.loads s get a...
XML和JSON相互轉換類 JAVA
package com.qs.util import net.sf.json.jsonobject import net.sf.json.xml.xmlserializer xml和json相互轉化類 需要的jar包 json lib 2.1.jar ezmorph 1.0.3.jar xom 1....