Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 国产日韩精品一区二区在线观看 ,果贷一区二区三区在线,免费a级猛片在线观看

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          JAVA實現生成多層JSON格式數據(含源碼-三層樣

          JAVA實現生成多層JSON格式數據(含源碼-三層樣例)

          SON

          JSON(JavaScriptObject Notation, JS 對象標記) 是一種輕量級的數據交換格式。它基于ECMAScript規范的一個子集,采用完全獨立于編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得 JSON 成為理想的數據交換語言。 易于人閱讀和編寫,同時也易于機器解析和生成,并有效地提升網絡傳輸效率。

          下面java生成JSON數據

          import net.sf.json.JSONArray;

          import net.sf.json.JSONObject;

          public class CopyOfJsonTest {

          /**

          * 生成多層json格式數據

          * 2017年4月28日 14:53:21

          * @param args

          */

          public static void main(String[] args) {

          JSONArray jsArray=new JSONArray();

          JSONObject j3=new JSONObject();

          j3.put(第三層1, 1);

          j3.put(第三層2, 2);

          j3.put(第三層3, 3);

          jsArray.add(j3);

          JSONArray jsArra2=new JSONArray();

          JSONObject j2=new JSONObject();

          j2.put(第二層1, 1);

          j2.put(第二層2, 2);

          j2.put(第二層3, jsArray);

          jsArra2.add(j2);

          JSONObject j1=new JSONObject();

          j1.put(第一層1, 1);

          j1.put(第一層2, j2);

          j1.put(第一層3, jsArra2);

          System.out.println(j1.toString());

          }

          }

          打印出的數據格式是

          感謝大家關注

          “點讀微訊”

          . JSON 是什么?

          • JSON 指的是 JavaScript 對象表示法(JavaScript Object Notation)
          • JSON 是輕量級的文本數據交換格式
          • JSON 獨立于語言:JSON 使用 Javascript語法來描述數據對象,但是 JSON 仍然獨立于語言和平臺。JSON 解析器和 JSON 庫支持許多不同的編程語言。 目前非常多的動態(PHP,JSP,.NET)編程語言都支持JSON。
          • JSON 具有自我描述性,更易理解

          2. JSON 的語法規則是怎樣的?

          • JSON 語法是 JavaScript 對象表示語法的子集。
            • 數據在名稱/值對中
            • 數據由逗號分隔
            • 大括號 {} 保存對象
            • 中括號 [] 保存數組,數組可以包含多個對象
          {
              "name": "xdr630",
              "favorite": "programming"
          }

          3. JSON 和 XML

          JSON常被拿來與XML做比較,因為JSON 的誕生本來就多多少少要有取代XML的意思。相比 XML,JSON的優勢如下:

          • 沒有結束標簽,長度更短,讀寫更快
          • 能夠直接被JavaScript解釋器解析
          • 可以使用數組

          兩者比較

          • JSON:
          {
              "name":"兮動人",
              "age":22,
              "fruits":["apple","pear","grape"]
          }
          • XML:
          <root>
              <name>兮動人</name>
              <age>22</age>
              <fruits>apple</fruits>
              <fruits>pear</fruits>
              <fruits>grape</fruits>
          </root>

          4. JSON的解析和生成(JSON 和 JS 對象互轉)

          • 在JavaScript中,有兩個方法與此相關: JSON.parseJSON.stringify
            JSON 和 JS 對象互轉
          1. 要實現從JSON字符串轉換為JS對象,使用 JSON.parse() 方法:
          <script>
              var str='{"name": "兮動人","age":22}';
              var obj=JSON.parse(str);
              console.log(obj);
          </script>

          要實現從JS對象轉換為JSON字符串,使用 JSON.stringify() 方法:

          <script>
              var str='{"name": "兮動人","age":22}';
              var obj=JSON.parse(str);
              console.log(obj);
              var jsonstr=JSON.stringify(obj);
              console.log(jsonstr);
          </script>

          5、JSON格式規定

          5.1、對象(0bject)

          對象用大括號(“{}”)括起來,大括號里是一系列的“名稱/值對”,請看概念圖。

          兩個并列的數據之間用逗號(“,”)隔開,注意兩點:

          使用英文的逗號(“,”),不要用中文的逗號(“”)

          最后一個“名稱/值對“之后不要加逗號

          5.2、數組(Array)

          • 數組表示一系列有序的值,用方括號(“[]”)包圍起來,并列的值之間用逗號分隔,請看概念圖。

          例如,以下的數組是合法的:

          [1,2,"three","four",true,false,null,[1,2],{"name":"兮動人"}]

          5.3、名稱/值對(Name/Value)

          • 名稱(Name)是一個字符串,要用雙引號括起來,不能用單引號也不能沒有引號,這一點與JavaScript不同。
          • 值的類型只有七種:字符串(string)、數值(number)、對象(object)、數組(array), true、false、null不能有這之外的類型,例如undefined、函數等。請看概念圖。

          字符串(string)的規則如下:

          1. 英文雙引號括起來,不能用單引號,也不能沒有。
          2. 字符串中不能單獨出現雙引號()和右斜杠(“\“)。
          3. 如果要打雙引號或右斜杠,需要使用“右斜杠+字符”的形式,例如\”\,其它的轉義字符也是如此字符串的概念圖。

          6、字符串轉化成對象



          • 解析:是指將符合JSON 語法規則的字符串轉換成對象的過程。
          • 不同的編程語言都提供了解析JSON字符串的方法,在這里主要講解JavaScript中的解析方法。主要有三種:
          1. 使用eval()
          2. 使用JSON.parse()
          3. 使用第三方庫,例如JQuery等

          6.1、 eval()

          • eval()函數的參數是一個字符串,其作用是直接執行其中的 JavaScript代碼。

          案例:eval()解析字符串

          <script>
            var str="console.log('hello')";
            eval(str);
          </script>
          • eval 解析字符串的結果:

          • eval()能夠解析JSON字符串。從這里也可以看得出,JSON 和JavaScript是高度嵌合的。
          • 案例:eval()解析JSON字符串
          <script>
            var str='{"name":"兮動人","age":22}';
            var obj=eval("("+str+")");
            console.log(obj)
          </script>
          • 但是,現在已經很少直接使用eval()來解析了,如果您的瀏覽器版本真的是很舊,可能才需要這個方法。此外,eval()是一個相對危險的函數,因為字符串中可能含有未知因素。在這里,作為學習,還是要知道這也是一種方法。
          • 請注意 eval()的參數,在字符串兩旁加了括號,這是必須的,否則會報錯。
          • 因為JSON字符串是被大括號(“{}”)包圍的,直接放到 eval()會被當成語句塊來執行,因此要在兩旁加上括號,使其變成表達式。

          6.2、JSON. parse()

          • 現在絕大多數瀏覽器都以支持JSON.parse()是推薦使用的方式。
          • 如果輸入了不符合規范的字符串,會報錯。

          案例:JSON字符串轉換為JS對象

          <script>
              var str='{"name":"兮動人","age":22}';
              var obj=JSON.parse(str)
              console.log(obj)
          </script>

          • JSON.parse()可以有第二個參數,是一個函數。此函數有兩個參數:name和value,分別代表名稱和值。當傳入一個JSON字符串后,JSON的每一組名稱/值對都要調用此函數。該函數有返回值,返回值將賦值給當前的名稱(name)。
          • 利用第二個參數,可以在解析JSON字符串的同時對數據進行一些處理。

          案例:

          <script>
              var str='{"name":"兮動人","age":22}';
              var obj=JSON.parse(str,fun);
              function fun(name,value){
                  console.log(name+":"+value);
                  return value
              }
              console.log(obj)
          </script>

          可以做判斷處理,當JSON字符串的 name=age 時,設置age的value=14

          ML 曾經是各種應用的配置和傳輸的首選方式。但是現在 XML 遇到了一個強勁的對手:JSON。我們可以在這里看到有關 JSON 的語法??傮w來說,JSON 的數據比 XML 更緊湊,在傳輸效率上也要優于 XML。不過 JSON 數據的層次化表達不及 XML,至少不如 XML 那樣突出。不過這并不會阻止 JSON 的廣泛應用。

          一個典型的 JSON 文檔可以像下面的例子:

          {
            "encoding" : "UTF-8",
            "plug-ins" : [
                "python",
                "c++",
                "ruby"
                ],
            "indent" : { "length" : 3, "use_space" : true }
          }

          JSON 的全稱是 JavaScript Object Notation,與 JavaScript 密不可分。熟悉 JavaScript 的童鞋馬上就會發現,JSON 的語法就是 JavaScript 對象聲明的語法。JSON 文檔其實就是一個 JavaScript 對象,因而也稱為 JSON 對象,以大括號作為起止符,其實質是不排序的鍵值對,其中鍵要求是 string 類型,值可以是任意類型。比如上面的示例,鍵 encoding 的值是字符串 UTF-8;鍵 plug-ins 的值是一個數組類型,在 JSON 中,數組以中括號表示,這個數組是一個字符串列表,分別有 python、c++ 和 ruby 三個對象;鍵 indent 的值是一個對象,這個對象有兩個屬性,length=3,use_space=true。

          對于 JSON 的解析,我們可以使用 QJson 這個第三方庫。QJson 可以將 JSON 數據轉換為 QVariant 對象,將 JSON 數組轉換成 QVariantList 對象,將 JSON 對象轉換成 QVariantMap 對象。我們在這里使用 git clone 出 QJson 的整個代碼。注意 QJson 沒有提供鏈接庫的 pro 文件,因此我們只需要將所有源代碼文件添加到我們的項目即可(如同這些文件是我們自己寫的一樣)。接下來就可以使用 QJson 讀取 JSON 內容:

          #include "parser.h"
          //////////
          QJson::Parser parser;
          bool ok;
          
          QString json("{"
                  "\"encoding\" : \"UTF-8\","
                  "\"plug-ins\" : ["
                  "\"python\","
                  "\"c++\","
                  "\"ruby\""
                  "],"
                  "\"indent\" : { \"length\" : 3, \"use_space\" : true }"
                  "}");
          QVariantMap result=parser.parse(json.toUtf8(), &ok).toMap();
          if (!ok) {
              qFatal("An error occurred during parsing");
              exit (1);
          }
          
          qDebug() << "encoding:" << result["encoding"].toString();
          qDebug() << "plugins:";
          
          foreach (QVariant plugin, result["plug-ins"].toList()) {
              qDebug() << "\t-" << plugin.toString();
          }
          
          QVariantMap nestedMap=result["indent"].toMap();
          qDebug() << "length:" << nestedMap["length"].toInt();
          qDebug() << "use_space:" << nestedMap["use_space"].toBool();

          將 JSON 對象轉換成 QVariant 對象很簡單,基本只需要下面幾行:

          // 1. 創建 QJson::Parser 對象
          QJson::Parser parser;
          
          bool ok;
          // 2. 將 JSON 對象保存在一個對象 json 中,進行數據轉換
          QVariant result=parser.parse (json, &ok);

          QJson::Parser::parse() 函數接受兩個參數,第一個參數是 JSON 對象,可以是 QIODevice * 或者是 QByteArray;第二個參數是轉換成功與否,如果成功則被設置為 true。函數返回轉換后的 QVariant 對象。注意我們轉換后的對象其實是一個 QVariantMap 類型,可以像 QMap 一樣使用重載的 [] 獲取鍵所對應的值。另外,由于 result [“plug-ins”] 是一個 QVariantList 對象(因為是由 JSON 數組返回的),因而可以調用其 toList() 函數,通過遍歷輸出每一個值。

          【領QT開發教程學習資料,點擊下方鏈接莬費領取↓↓,先碼住不迷路~】

          點擊→領取Qt開發(視頻教程+文檔+代碼+項目實戰)

          如果需要將 QVariant 生成 JSON 對象,我們則使用 QJson::Serializer 對象。例如:

          QVariantList people;
          
          QVariantMap bob;
          bob.insert("Name", "Bob");
          bob.insert("Phonenumber", 123);
          
          QVariantMap alice;
          alice.insert("Name", "Alice");
          alice.insert("Phonenumber", 321);
          
          people << bob << alice;
          
          QJson::Serializer serializer;
          bool ok;
          QByteArray json=serializer.serialize(people, &ok);
          
          if (ok) {
              qDebug() << json;
          } else {
              qCritical() << "Something went wrong:" << serializer.errorMessage();
          }

          QJson::Serializer 和前面的 QJson::Parser 的用法相似,只需要調用 QJson::Serializer::serialize() 即可將 QVariant 類型的數據轉換為 JSON 格式。其返回值是 QByteArray 類型,可以用于很多其它場合。

          上面是 QJson 的主要使用方法。其實 QJson 還提供了另外一個類 QObjectHelper,用于 QVariant 和 QObject 之間的轉換。注意我們上面所說的 QJson 的轉換需要的是 QVariant 類型的數據,無論是轉換到 JSON 還是從 JSON 轉換而來。但是通常我們在應用程序中使用的是 QObject 及其子類。QObjectHelper 提供了一個工具函數,完成 QVariant 和 QObject 之間的轉換。例如我們有下面的類:

          class Person : public QObject
          {
            Q_OBJECT
          
            Q_PROPERTY(QString name READ name WRITE setName)
            Q_PROPERTY(int phoneNumber READ phoneNumber WRITE setPhoneNumber)
            Q_PROPERTY(Gender gender READ gender WRITE setGender)
            Q_PROPERTY(QDate brithday READ brithday WRITE setBrithday)
            Q_ENUMS(Gender)
          
            public:
              Person(QObject* parent=0);
              ~Person();
          
              QString name() const;
              void setName(const QString& name);
          
              int phoneNumber() const;
              void setPhoneNumber(const int phoneNumber);
          
              enum Gender {Male, Female};
              void setGender(Gender gender);
              Gender gender() const;
          
              QDate brithday() const;
              void setBrithday(const QDate& dob);
          
            private:
              QString m_name;
              int m_phoneNumber;
              Gender m_gender;
              QDate m_dob;
          };

          那么,我們可以使用下面的代碼將 Person 類進行 JSON 序列化:

          Person person;
          person.setName("Flavio");
          person.setPhoneNumber(123456);
          person.setGender(Person::Male);
          person.setDob(QDate(1982, 7, 12));
          
          QVariantMap variant=QObjectHelper::qobject2qvariant(&person);
          QJson::Serializer serializer;
          qDebug() << serializer.serialize( variant);

          以及:


          主站蜘蛛池模板: 亚洲一区二区三区国产精品| 精品一区二区AV天堂| 亚洲一区二区三区免费观看| 国产一区二区三区小向美奈子| 亚洲AV无码一区二区二三区入口| 日本精品一区二区三区在线视频一| 国产精品视频一区麻豆| 久久青草精品一区二区三区| 成人精品一区二区三区中文字幕| 精品国产福利在线观看一区| 中文字幕人妻AV一区二区| 亚洲一区二区在线免费观看| 嫩B人妻精品一区二区三区| 一区二区精品视频| 老鸭窝毛片一区二区三区| 怡红院AV一区二区三区| 亚洲精品色播一区二区| 中文字幕乱码人妻一区二区三区| 中文字幕日韩一区二区三区不卡| 久久se精品一区二区国产| 久久国产精品最新一区| 久久综合精品不卡一区二区| 人妻夜夜爽天天爽爽一区| 性色A码一区二区三区天美传媒 | 日韩一区二区精品观看| 精品人妻一区二区三区四区| 无码人妻精品一区二区三区99不卡 | 色婷婷一区二区三区四区成人网| 一本大道东京热无码一区| 精品视频一区二区三区在线观看 | 呦系列视频一区二区三区| 亚洲丶国产丶欧美一区二区三区| 亚洲综合av一区二区三区不卡| 人妻视频一区二区三区免费| 日韩免费视频一区| 99国产精品一区二区| 国产成人无码一区二区在线播放| 一区二区在线免费观看| 亚洲av无码一区二区三区人妖 | 国产一区二区三区在线免费| 一区二区三区在线观看视频|