1. 程式人生 > >通訊設計:利用java的socket傳送json

通訊設計:利用java的socket傳送json

JSON(JavaScript Object Notation, JS 物件標記) 是一種輕量級的資料交換格式,簡潔和清晰的層次結構使得 JSON 成為理想的資料交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提升網路傳輸效率。

其本質還是key-value的鍵值對,如:

"name":"yoman"

可細分為json陣列和json物件,如:
{"Name": "bill", "age": "15"}//是一個物件
"people":[        
	{"Name": "KOS","age":"16"},
	{"Name":"LOGEN","age":"13"}
]//是一個數組

這種簡單易懂的組織形式,使得其很適合作為一種訊息在網路間傳輸,相比其他自定義格式的訊息格式,更易懂和便於解析,但缺點也是有的,由於文字中加入了key,因此實際上有大量的重複文字被髮送,就使得流量變大。

Anyway,我們經常使用socket傳送一些諸如String的內容,檢視原始碼,其實JsonObject本質上就是一個字串,因此利用socket來發送它,也是能夠很簡單就能實現的。

1.首先,需要到官方獲取org.json.jar包的內容:

在此之前,如果你對socket及輸入輸出流不甚瞭解,可以到這裡看看。

2.構建一個json物件併發送(此處採用BufferedWriter

JSONObject jsout = new JSONObject();
jsout.put("id",111);
jsout.put("msg","傳送訊息");
out.write(jsout.toString()+"\n");//注意需要一個換行符,否則多個數據包會粘粘到一起去
out.flush();

*事實上JSONObject的構建有很多方法,如直接建立一個Map,然後new JSONObject(map);可以參考JSONObject.java

3.接收並解析:(BufferedReader)
if(in.ready()){
	System.out.println("Log: Watiing Json Message");
	String readIn=in.readLine();
	System.out.println("Log: "+TCPip+":"+TCPport+" SendMsg:\n"+readIn);
					
	JSONObject js = new JSONObject(readIn);
	System.out.println("id="+js.get("id"));
	System.out.println("msg="+js.get("msg"));
}

*同樣,此處的JSONObject的構建是直接從一個String構建的,也可以在getBytes後通過一個Byte[]來構建。

4.子物件:

需要注意的是,如果一個Json物件裡有個子物件如:

"people":{       
	"man":{"Name": "KOS",
		   "lastName":"16"
	},//子物件
	"women":{"Name":"LOGEN",
		     "lastName":"13"
	}//子物件
}
那麼在獲取KOS的名字時,要這麼寫:
JSONObject sup = new JSONObject(readIn);
JSONObject sub =sup.getJSONObject("man");
sub.get("name");
*更多參見JSONObject.java


參考資料:

什麼是json:

相關推薦

通訊設計利用java的socket傳送json

JSON(JavaScript Object Notation, JS 物件標記) 是一種輕量級的資料交換格式,簡潔和清晰的層次結構使得 JSON 成為理想的資料交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提升網路傳輸效率。 其本質還是key-value

常規的利用Curl傳送json資料到後臺SpringBoot+MongoDB測試CRUD

web後端的開發涉及很多很多技術,要相互配合好需要不斷的練習。本文要做的事情是實現一個伺服器端程式,運用SpringBoot技術,結合MongoDB資料庫。然後用剛學的curl命令傳送json資料來測試資料庫的CRUD功能。 首先是新建一個工程並建立pom檔案 <?xml ve

PHP 利用 curl 傳送get請求

/* *傳送CURL get請求 */ function httpGet($url) { $curl = curl_init(); //初始化一個cURL會話。 curl_setopt($curl, CURLOPT_TIMEOUT, 100); //設定cURL允許執行的

json處理三部曲之第二曲利用Jackson處理json

利用Jackson處理json需要匯入的jar包(2以上版本的): <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId&

架構設計系統間通訊(36)——Apache Camel快速入門(上)

架構設計:系統間通訊(36)——Apache Camel快速入門(上) :http://blog.csdn.net/yinwenjie(未經允許嚴禁用於商業用途!) https://blog.csdn.net/yinwenjie/article/details/51692340 1、本專題主

產品設計教程利用“系列位置效應”優化UI

任何博得人們喜歡的產品都在一定程度上契合了使用者的心理需求。設計和心理學息息相關,掌握一些基本心理學知識,設計師的作品更能在潛意識中抓住使用者的心。 系列位置效應 “系列位置效應”(The Serial Position Effect) 最早由研究記憶的德國心理學家 Hermann

ML之SVM利用Js語言設計SVM演算法(SMO演算法+線性核/高斯核)

ML之SVM:利用Js語言設計SVM演算法(SMO演算法+線性核/高斯核) 輸出結果   設計思路     設計程式碼(部分程式碼) var doTest = function() { loadData();

陣列(隨機生成一維陣列),二維陣列的概念和題目設計利用二維陣列 任意給定分數去計算科目和人均平均分)

1 //陣列間的關係arr[]中的數字為幾,[]內就有幾個數 2 //{ }內的數是從0開始,如需要列印應從0開數 3 如{2,6,9,8,7}列印arr[4]就是7 4 #include <stdio.h> 5 #include <stdlib.h> 6 int

利用JavaMail傳送郵件smtp.163.com

一、利用JavaMail傳送郵件案例: 1、maven專案結構: 2、先在pom.xml裡邊加入Javamail依賴,系統會根據座標自動下載mail包(前提是配置好了maven): 3、配置email.properties屬性檔案,主要是為了不更改程式碼的前提下,該改變傳送郵件的一些基本資訊:

【EDA】實驗2利用74161計數器晶片設計M=12的計數器

一.實驗內容 1.利用74161計數器晶片設計一個M=12的計數器 2.利用Quartus軟體進行設計和模擬 3.觀察模擬波形 二.實驗步驟 本次實驗採用Quartus軟體進行,詳細步驟同實驗1類似,相關內容可以參考:【EDA】實驗1:拼接4-16譯碼器,以下

.NET Core微服務之路利用DotNetty實現一個簡單的通訊過程

  上一篇我們已經全面的介紹過《基於gRPC服務發現與服務治理的方案》,我們先複習一下RPC的呼叫過程(筆者會在這一節的幾篇文章中反覆的強調這個過程呼叫方案),看下圖

【EDA】實驗3利用74161計數器晶片設計M=20的計數器

一.實驗內容 1.利用74161計數器晶片設計一個M=20的計數器 2.利用Quartus軟體進行設計和模擬 3.觀察模擬波形 二.實驗步驟 本次實驗採用Quartus軟體進行,詳細步驟同實驗1類似,相關內容可以參考:【EDA】實驗1:拼接4-16譯碼器,以下

Py之wxPython利用wxPython設計GUI介面(圖片背景+簡單按鈕)

Py之wxPython:利用wxPython設計GUI介面(圖片背景+簡單按鈕) 實現介面 實現程式碼 import wx class MyPanel(wx.Panel): def __init__(self, parent, id): wx.P

DICOM醫學影象處理利用fo-dicom傳送C-Find查詢Worklist

背景:         如上一篇專欄博文所描述,Worklist可以看做是PACS系統、MODALITY裝置和RIS系統之間的資訊交換。從RIS系統到MODALITY通過Worklist可以提供諸如患者個人資訊(姓名、年齡、生日等)和其他管理資料,以及提供關於成像過程和產生

evpp設計細節系列(1)利用 enable_shared_from_this 實現一個自管理的定時器

0. 前言 現在我們覆盤一下這個功能的實現細節和演化過程。 1. 基礎程式碼 定時器原型宣告可能是下面的樣子: class InvokeTimer { public: InvokeTimer(struct event_base* ev

架構設計系統間通訊(34)——被神化的ESB(上)

1、概述 從本篇文章開始,我們將花一到兩篇的篇幅介紹ESB(企業服務匯流排)技術的基本概念,為讀者們理清多個和ESB技術有關名詞。我們還將在其中為讀者闡述什麼情況下應該使用ESB技術。接下來,為了加深讀者對ESB技術的直觀理解,我們將利用Apache Came

架構設計系統間通訊(16)——服務治理與Dubbo 中篇(預熱)

1、前序 上篇文章中(《架構設計:系統間通訊(15)——服務治理與Dubbo 上篇》),我們以示例的方式講解了阿里DUBBO服務治理框架基本使用。從這節開始我們將對DUBBO的主要模組的設計原理進行講解,從而幫助讀者理解DUBBO是如何工作的。(由於這個章節的內容比較多,包括了知識準備、DUBBO框架概述

架構設計系統間通訊(6)——IO通訊模型和Netty 上篇

1、Netty介紹 在Netty官網上,對於Netty的介紹是: Netty is a NIO client server framework which enables quick and easy development of network ap

架構設計系統間通訊(23)——提高ActiveMQ工作效能(中)

6、ActiveMQ處理規則和優化 在ActiveMQ單個服務節點的優化中,除了對ActiveMQ單個服務節點的網路IO模型進行優化外,生產者傳送訊息的策略和消費者處理訊息的策略也關乎整個訊息佇列系統是否能夠高效工作。請看下圖所示的訊息生產者和訊息消費

架構設計系統間通訊(15)——服務治理與Dubbo 上篇

1、上篇中“自定義服務治理框架”的問題 在之前的文章中(《架構設計:系統間通訊(13)——RPC例項Apache Thrift 下篇(1)》、《架構設計:系統間通訊(14)——RPC例項Apache Thrift 下篇(2)》),我們基於服務治理的基本原理,自