使用JAVA物件和JSON相互轉換問題

2021-08-19 06:55:24 字數 3758 閱讀 9917

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....