深入理解JSON及其应用教程

版权申诉
0 下载量 99 浏览量 更新于2024-10-09 收藏 251KB ZIP 举报
资源摘要信息:"JSON.zip_JSON" JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON基于JavaScript的一个子集,虽然JSON的语法与JavaScript的语法类似,但JSON是独立于语言的,很多编程语言都支持JSON格式数据的生成和解析。JSON以纯文本的形式存储和传输数据,在网络应用中的作用类似于XML,但具有比XML更小的尺寸和更快的解析速度。 JSON文件通常用于配置文件、网络请求与响应的传输格式等场景。它以键值对的形式存储数据,其中键必须为字符串,而值可以是字符串、数字、数组、布尔值、null或者另一个JSON对象。JSON结构简单,易于理解和编写,使其成为Web应用开发中数据交换的首选格式。 一个典型的JSON数据的例子如下: ```json { "name": "张三", "age": 30, "isStudent": false, "courses": ["数学", "英语"], "address": { "street": "中山路", "city": "北京" } } ``` 在上述例子中,`name`、`age`、`isStudent`、`courses`和`address`是JSON对象的键,它们对应的值分别是字符串、数字、布尔值、数组和另一个JSON对象。 在编程实践中,处理JSON数据通常涉及到序列化和反序列化两个过程。序列化是将对象转换成JSON格式的过程,而反序列化则是将JSON格式数据转换回对象的过程。多数现代编程语言都提供了内置的JSON处理库或者模块,例如在JavaScript中可以直接使用`JSON.stringify`方法将对象转换为JSON字符串,使用`JSON.parse`方法将JSON字符串解析为JavaScript对象。 在Web开发中,JSON经常被用于前后端之间的数据交互。前后端约定好数据的格式,前端发送JSON格式的请求数据到后端,后端处理完业务逻辑后,将结果以JSON格式返回给前端,前端再通过解析JSON响应数据来实现相应的业务逻辑处理。 使用JSON的优点包括: 1. 跨平台支持:几乎所有现代编程语言都支持JSON格式的解析和生成。 2. 易于阅读:JSON数据结构简单,易于阅读和编辑。 3. 轻量级:相比于XML,JSON的语法更加简洁,使得数据的传输更快。 4. 灵活性:JSON支持无序的键值对,使得它可以很好地适应不同的数据结构需求。 尽管JSON非常流行,它也有一些局限性,比如不支持注释,且不支持二进制数据,虽然可以通过Base64编码的方式间接传输二进制数据。另外,在处理复杂的数据结构时,JSON的嵌套层级可能变得很复杂,这可能会给数据处理带来一定的挑战。 总结来说,JSON是一种广泛使用的数据交换格式,它简洁、易于阅读和编写,被广泛应用于Web开发中的数据交换。理解和掌握JSON的知识对于Web开发者来说是基本且必要的技能。

import json import base64 from PIL import Image import io import cv2 import numpy as np from ultralytics import YOLO import supervision as sv def init_context(context): context.logger.info("Init context... 0%") model_path = "yolov8m-seg.pt" # YOLOV8模型放在nuclio目录下构建 model = YOLO(model_path) # Read the DL model context.user_data.model = model context.logger.info("Init context...100%") def handler(context, event): context.logger.info("Run yolo-v8-seg model") data = event.body buf = io.BytesIO(base64.b64decode(data["image"])) threshold = float(data.get("threshold", 0.35)) context.user_data.model.conf = threshold image = Image.open(buf) yolo_results = context.user_data.model(image, conf=threshold)[0] labels = yolo_results.names detections = sv.Detections.from_yolov8(yolo_results) detections = detections[detections.confidence > threshold] masks = detections.xy conf = detections.confidence class_ids = detections.class_id results = [] if masks.shape[0] > 0: for label, score, mask in zip(class_ids, conf, masks): # 将mask转换为轮廓 contours, _ = cv2.findContours(mask.astype(np.uint8), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for contour in contours: points = [] for point in contour: x = point[0][0] y = point[0][1] points.append([x, y]) results.append({ "confidence": str(score), "label": labels.get(label, "unknown"), "points": points, "type": "polygon",}) return context.Response(body=json.dumps(results), headers={}, content_type='application/json', status_code=200)不用supervision 包 用别的方式解析

2023-07-16 上传