json實現實例化對象的存與讀,json序列化對象

本文目錄一覽:

程序開發中json 存儲結構化數據是怎麼回事呢?

使用 json 存儲結構化數據就是從文件中讀寫字元串很容易。

1.數值就要多費點兒周折,因為 read() 方法只會返回字元串,應將其傳入 int() 這樣的函數,就可以將 ‘123’ 這樣的字元串轉換為對應的數值 123。當你想要保存更為複雜的數據類型,例如嵌套的列表和字典,手工解析和序列化它們將變得更複雜。

好在用戶不是非得自己編寫和調試保存複雜數據類型的代碼,Python 允許你使用常用的數據交換格式 JSON(JavaScript Object Notation)。標準模塊 json 可以接受 Python 數據結構,並將它們轉換為字元串表示形式;此過程稱為 序列化。從字元串表示形式重新構建數據結構稱為 反序列化。序列化和反序列化的過程中,表示該對象的字元串可以存儲在文件或數據中,也可以通過網路連接傳送給遠程的機器。

Note

2.JSON 格式經常用於現代應用程序中進行數據交換。許多程序員都已經熟悉它了,使它成為相互協作的一個不錯的選擇。

如果你有一個對象 x,你可以用簡單的一行代碼查看其 JSON 字元串表示形式:

json.dumps([1, ‘simple’, ‘list’])

‘[1, “simple”, “list”]’

dumps() 函數的另外一個變體 dump(),直接將對象序列化到一個文件。所以如果 f 是為寫入而打開的一個 文件對象,我們可以這樣做:

json.dump(x, f)

為了重新解碼對象,如果 f 是為讀取而打開的 文件對象:

x = json.load(f)

3.這種簡單的序列化技術可以處理列表和字典,但序列化任意類實例為 JSON 需要一點額外的努力。 json 模塊的手冊對此有詳細的解釋。

See also

pickle – pickle 模塊

4.與 JSON 不同,pickle 是一個協議,它允許任意複雜的 Python 對象的序列化。因此,它只能用於 Python 而不能用來與其他語言編寫的應用程序進行通信。默認情況下它也是不安全的:如果數據由熟練的攻擊者精心設計, 反序列化來自一個不受信任源的 pickle 數據可以執行任意代碼。

什麼叫JSON序列化啊?在.net下面學習json,我不懂什麼叫序列化?有什麼作用?

序列化 序列化 (serialization)

將對象的狀態信息轉換為可以存儲或傳輸的窗體的過程。在序列化期間,對象將其當前狀態寫入到臨時或持久性存儲區。以後,可以通過從存儲區中讀取或反序列化對象的狀態,重新創建該對象。

序列化使其他代碼可以查看或修改那些不序列化便無法訪問的對象實例數據。確切地說,代碼執行序列化需要特殊的許可權:即指定了 SerializationFormatter 標誌的 SecurityPermission。在默認策略下,通過 Internet 下載的代碼或 Intranet 代碼不會授予該許可權;只有本地計算機上的代碼才被授予該許可權。

通常,對象實例的所有欄位都會被序列化,這意味著數據會被表示為實例的序列化數據。這樣,能夠解釋該格式的代碼有可能能夠確定這些數據的值,而不依賴於該成員的可訪問性。類似地,反序列化從序列化的表示形式中提取數據,並直接設置對象狀態,這也與可訪問性規則無關。

對於任何可能包含重要的安全性數據的對象,如果可能,應該使該對象不可序列化。如果它必須為可序列化的,請嘗試生成特定欄位來保存不可序列化的重要數據。如果無法實現這一點,則應注意該數據會被公開給任何擁有序列化許可權的代碼,並確保不讓任何惡意代碼獲得該許可權。

序列化

序列化是將對象狀態轉換為可保持或傳輸的格式的過程。與序列化相對的是反序列化,它將流轉換為對象。這兩個過程結合起來,可以輕鬆地存儲和傳輸數據。

序列化的目的:

1、以某種存儲形式使自定義對象持久化;

2、將對象從一個地方傳遞到另一個地方。

.NET Framework 提供兩種序列化技術:

* 二進位序列化保持類型保真度,這對於在應用程序的不同調用之間保留對象的狀態很有用。例如,通過將對象序列化到剪貼板,可在不同的應用程序之間共享對象。您可以將對象序列化到流、磁碟、內存和網路等等。遠程處理使用序列化「通過值」在計算機或應用程序域之間傳遞對象。

* XML 序列化僅序列化公共屬性和欄位,且不保持類型保真度。當您要提供或使用數據而不限制使用該數據的應用程序時,這一點是很有用的。由於 XML 是一個開放式標準,因此,對於通過 Web 共享數據而言,這是一個很好的選擇。SOAP 同樣是一個開放式標準,這使它也成為一個頗具吸引力的選擇。

java解析json格式文件,再保存在資料庫怎麼做?

java解析json格式文件,再保存在資料庫的方法:

1:定義一個實體類

2:用json lib將json字元串轉為Java對象

3:用jdbc或hibernate將java對象存入資料庫

直接讀寫文件,再把讀出來的文件內容格式化成json,再用JDBC、Mybatis或者其他框架將json數據存入資料庫。

假設實體類是這樣的:

public class ElectSet {

public String xueqi;

public String xuenian;

public String startTime;

public String endTime;

public int menshu;

public String isReadDB;

//{“xueqi”:,”xuenian”:,”startTime”:,”endTime”:,”renshu”:,”isReadDB”:}

public String getXueqi() {

   return xueqi;

}

public void setXueqi(String xueqi) {

   this.xueqi = xueqi;

}

public String getXuenian() {

   return xuenian;

}

public void setXuenian(String xuenian) {

   this.xuenian = xuenian;

}

public String getStartTime() {

   return startTime;

}

public void setStartTime(String startTime) {

   this.startTime = startTime;

}

public String getEndTime() {

   return endTime;

}

public void setEndTime(String endTime) {

   this.endTime = endTime;

}

public int getMenshu() {

   return menshu;

}

public void setMenshu(int menshu) {

   this.menshu = menshu;

}

public String getIsReadDB() {

   return isReadDB;

}

public void setIsReadDB(String isReadDB) {

   this.isReadDB = isReadDB;

}

 

}

有一個json格式的文件,存的信息如下:

Sets.json:

{“xuenian”:”2007-2008″,”xueqi”:”1″,”startTime”:”2009-07-19 08:30″,”endTime”:”2009-07-22 18:00″,”menshu”:”10″,”isReadDB”:”Y”}

具體操作:

/*

* 取出文件內容,填充對象

*/

public ElectSet findElectSet(String path){

   ElectSet electset=new ElectSet();

   String sets=ReadFile(path);//獲得json文件的內容

   JSONObject jo=JSONObject.fromObject(sets);//格式化成json對象

   //System.out.println(“————” jo);

   //String name = jo.getString(“xuenian”);

   //System.out.println(name);

   electset.setXueqi(jo.getString(“xueqi”));

   electset.setXuenian(jo.getString(“xuenian”));

   electset.setStartTime(jo.getString(“startTime”));

   electset.setEndTime(jo.getString(“endTime”));

   electset.setMenshu(jo.getInt(“menshu”));

   electset.setIsReadDB(jo.getString(“isReadDB”));

   return electset;

}

//設置屬性,並保存

public boolean setElect(String path,String sets){

   try {

    writeFile(path,sets);

    return true;

   } catch (IOException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    return false;

   }

}

//讀文件,返回字元串

public String ReadFile(String path){

    File file = new File(path);

    BufferedReader reader = null;

    String laststr = “”;

    try {

     //System.out.println(“以行為單位讀取文件內容,一次讀一整行:”);

     reader = new BufferedReader(new FileReader(file));

     String tempString = null;

     int line = 1;

     //一次讀入一行,直到讀入null為文件結束

     while ((tempString = reader.readLine()) != null) {

      //顯示行號

      System.out.println(“line ” line “: ” tempString);

      laststr = laststr tempString;

      line ;

     }

     reader.close();

    } catch (IOException e) {

     e.printStackTrace();

    } finally {

     if (reader != null) {

      try {

       reader.close();

      } catch (IOException e1) {

      }

     }

    }

    return laststr;

}

將獲取到的字元串,入庫即可。

jackson中objectMapper的使用

Jackson可以輕鬆的將Java對象轉換成json對象和xml文檔,同樣也可以將json、xml轉換成Java對象

ObjectMapper類是Jackson庫的主要類。它稱為ObjectMapper的原因是因為它將JSON映射到Java對象(反序列化),或將Java對象映射到JSON(序列化)。它使用JsonParser和JsonGenerator的實例實現JSON實際的讀/寫。

三種方式

1.Jackson通過將JSON欄位的名稱與Java對象中的getter和setter方法相匹配,將JSON對象的欄位映射到Java對象中的欄位。Jackson刪除了getter和setter方法名稱的「get」和「set」部分,並將剩餘名稱的第一個字元轉換為小寫。

2.Jackson還可以通過java反射進行匹配

3.通過註解或者其它方式進行自定義的序列化和反序列化程序。

2.Read Object From JSON Reader

3.Read Object From JSON File

本例使用的是文件URL,也可使用一個HTTP URL(如: ).

6.Read Object From JSON Byte Array

7.Read Object Array From JSON Array String

ObjectMapper write有三個方法

使用Jackson可以讀取和寫入除JSON之外的其他數據格式:

其中這些數據格式比JSON更緊湊,因此在存儲時佔用的空間更少,並且讀取和寫入速度比JSON更快。在以下部分中,我將向您展示如何使用Jackson讀取和寫入其中一些數據格式。

CBOR是一種二進位數據格式,它與JSON兼容,但比JSON更緊湊,因此讀寫速度更快。Jackson ObjectMapper可以像讀寫JSON一樣讀寫CBOR。為了使用Jackson讀取和寫入CBOR,您需要為項目添加額外的Maven依賴項。介紹了添加Jackson CBOR Maven依賴關係:

MessagePack是一種文本數據格式,與JSON兼容,但更緊湊,因此讀寫速度更快。Jackson ObjectMapper可以像讀寫JSON一樣讀寫MessagePack。為了使用Jackson讀寫MessagePack,您需要為項目添加額外的Maven依賴項:

YAML是一種文本數據格式,類似於JSON,但使用不同的語法。Jackson ObjectMapper可以像讀寫JSON一樣讀寫YAML。為了使用Jackson讀取和寫入YAML,您需要為項目添加額外的Maven依賴項:

ObjectMapper 可以通過自定義解析器來定義解析方法

以下是自定義的反序列化的方法

註冊到objectMapper中

c#讀取json

先聲明,以下兩個方法我一直用

肯定沒有問題

TXT讀取方法

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.IO;

namespace WindowsApplication1

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)

{

this.rT1.Text = “”;

FileStream fs1 = new FileStream(“2.txt”, FileMode.Open);

StreamReader sr = new StreamReader(fs1);

string str1 = sr.ReadToEnd();

this.rT1.Text = str1;

sr.Close();

fs1.Close();

}

}

}

———————————————————————————-

以下是 json的 序列化和反序列化

.net3.5提供了json對象序列化與反序列化的類。位置在:System.Runtime.Serialization.Json空間下。其中如果要應用這個空間還必須添加對

System.ServiceModel

System.ServiceModel.Web

這兩個庫文件的引用。

參考實體類:Customer

public class Customer

{

public int Unid { get; set; }

public string CustomerName { get; set; }

}

DataContractJsonSerializer

將對象序列化為 JavaScript 對象表示法 (JSON),並將 JSON 數據反序列化為對象。無法繼承此類。

其中有個方法WriteObject,它的功能定義為:將對象序列化為 JavaScript 對象表示法 (JSON) 文檔

它有三個方法重載,其中一個為:

public override void WriteObject(Stream stream,Object graph)

它的功能描述這:將指定對象序列化為 JavaScript 對象表示法 (JSON) 數據,並將生成的 JSON 寫入流中

(一)序列化

public string ToJson(Customer customer)

{

DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(Customer));

MemoryStream ms=new MemoryStream();

ds.WriteObject(ms, customer);

string strReturn=Encoding.UTF8.GetString(ms.ToArray());

ms.Close();

return strReturn;

}

創建類實例,通過它的WriteObject方法來向流寫入序列化的對象,再把流寫入到字元串中。就可以得到JSON對象。

測試一下:

Customer cc = new Customer {Unid=1,CustomerName=”John” };

string strJson = ToJson(cc);

Console.WriteLine(strJson);

結果為:{“CustomerName”:”John”,”Unid”:1}

(二)反序列化

ReadObject方法,其描述為:反序列化 JSON(JavaScript 對象表示法)數據,並返回反序列化的對象。

它有很多重載,現在通過一種:

public override Object ReadObject(Stream stream)

它從流中得到反序列化的對象。

public object FromJson(string strJson)

{

DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(Customer));

MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(strJson));

return ds.ReadObject(ms);

}

測試:

string strJson=”{\”CustomerName\”:\”John\”,\”Unid\”:1}”;

Customer c=FromJson(strJson) as Customer;

Console.WriteLine(c.Unid+” “+c.CustomerName);

(三)通過泛型方法對兩者進行修改

為了適應多類型實例的序列化與反序列化,通過泛型方法來實現。

public string ToJsonT(T t)

{

DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(T));

MemoryStream ms = new MemoryStream();

ds.WriteObject(ms, t);

string strReturn = Encoding.UTF8.GetString(ms.ToArray());

ms.Close();

return strReturn;

}

public T FromJsonT(string strJson) where T:class

{

DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(T));

MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(strJson));

return ds.ReadObject(ms) as T;

}

•反序列化時通過泛型約束來指定類型T為類類型。

測試:

Customer cc = new Customer {Unid=1,CustomerName=”John” };

string strJsons = ToJsonCustomer(cc);

Console.WriteLine(strJsons);

string strJson=”{\”CustomerName\”:\”John\”,\”Unid\”:1}”;

Customer c = FromJsonCustomer(strJson);

Console.WriteLine(c.Unid+” “+c.CustomerName);

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/199889.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-05 14:01
下一篇 2024-12-05 14:01

相關推薦

  • 金額選擇性序列化

    本文將從多個方面對金額選擇性序列化進行詳細闡述,包括其定義、使用場景、實現方法等。 一、定義 金額選擇性序列化指根據傳入的金額值,選擇是否進行序列化,以達到減少數據傳輸的目的。在實…

    編程 2025-04-29
  • Python生成隨機數的應用和實例

    本文將向您介紹如何使用Python生成50個60到100之間的隨機數,並將列舉使用隨機數的幾個實際應用場景。 一、生成隨機數的代碼示例 import random # 生成50個6…

    編程 2025-04-29
  • JSON的MD5

    在Web開發過程中,JSON(JavaScript Object Notation)是最常用的數據格式之一。MD5(Message-Digest Algorithm 5)是一種常用…

    編程 2025-04-29
  • 面向對象編程、類和對象

    面向對象編程(Object-Oriented Programming, OOP)是一種編程方法,它將現實世界中的事物抽象為對象(Object),對象的屬性和方法被封裝成類(Clas…

    編程 2025-04-29
  • 使用Java將JSON寫入HDFS

    本篇文章將從以下幾個方面詳細闡述Java將JSON寫入HDFS的方法: 一、HDFS簡介 首先,先來了解一下Hadoop分散式文件系統(HDFS)。HDFS是一個可擴展性高的分散式…

    編程 2025-04-29
  • 理解Java反序列化(Java Deserialization Vulnerability)

    本文將從多個方面深入探討Java反序列化漏洞,對於筆者所總結的經驗和教訓,以及掌握Java反序列化的設計模式、最佳實踐和防範措施。 一、Java反序列化漏洞概述 Java反序列化漏…

    編程 2025-04-28
  • Mapster:一個高性能的對象映射庫

    本文將深入介紹furion.extras.objectmapper.mapster,一個高性能的對象映射庫,解釋它是如何工作的以及如何在你的項目中使用它。 一、輕鬆地實現對象之間的…

    編程 2025-04-28
  • 如何在dolphinscheduler中運行chunjun任務實例

    本文將從多個方面對dolphinscheduler運行chunjun任務實例進行詳細的闡述,包括準備工作、chunjun任務配置、運行結果等方面。 一、準備工作 在運行chunju…

    編程 2025-04-28
  • 如何使用Newtonsoft datatable轉Json

    Newtonsoft DataTable 是一個基於.NET的JSON框架,也是一個用於序列化和反序列化JSON的強大工具。 在本文中,我們將學習如何使用Newtonsoft Da…

    編程 2025-04-28
  • Python返回對象類型

    Python是一種動態、解釋型、高級編程語言。Python是一種面向對象的語言,即所有的一切都是一個對象。 一、基本類型 Python中的基本類型有整數int、浮點數float、布…

    編程 2025-04-28

發表回復

登錄後才能評論