Cách PUT một đối tượng json với một mảng bằng cách sử dụng curl


94

Tôi có một loạt dữ liệu để nhập vào cơ sở dữ liệu. Giao diện người dùng để nhập dữ liệu không tốt cho mục nhập hàng loạt, vì vậy tôi đang cố gắng tạo một dòng lệnh tương đương. Khi tôi kiểm tra yêu cầu mạng của giao diện người dùng trong chrome, tôi thấy một yêu cầu PUT của một đối tượng json. Khi tôi cố gắng sao chép yêu cầu

curl -H 'Accept: application/json' -X PUT '{"tags":["tag1","tag2"],"question":"Which band?","answers":[{"id":"a0","answer":"Answer1"},{"id":"a1","answer":"answer2"}]}' http://example.com/service`

Tôi gặp lỗi

curl: (3) [globbing] dấu ngoặc nhọn lồng nhau không được hỗ trợ ở vị trí X

Trong đó X là vị trí ký tự của "[" đầu tiên.

Làm cách nào để ĐẶT một đối tượng json bao gồm một mảng?

Câu trả lời:


147

Dòng lệnh của bạn phải có dữ liệu -d / - được chèn trước chuỗi mà bạn muốn gửi trong PUT và bạn muốn đặt Loại-Nội dung chứ không phải Chấp nhận.

curl -H 'Content-Type: application/json' -X PUT -d '[JSON]' http://example.com/service

Sử dụng dữ liệu JSON chính xác từ câu hỏi, dòng lệnh đầy đủ sẽ trở thành:

curl -H 'Content-Type: application/json' -X PUT \
-d '{"tags":["tag1","tag2"],"question":"Which band?","answers":[{"id":"a0","answer":"Answer1"},{"id":"a1","answer":"answer2"}]}' \
http://example.com/service

4
-1 vì Content-Type (thay vì Accept) là tiêu đề nên được đặt trong trường hợp này.
Goran

3
Đối với những người đang thắc mắc, [JSON] chỉ đơn giản là một trình giữ chỗ cho chuỗi JSON. Không thêm dấu ngoặc vuông thừa xung quanh chuỗi JSON của bạn.
Mihai Todor

89

Mặc dù bài viết gốc có các vấn đề khác (tức là thiếu "-d"), thông báo lỗi chung chung hơn.

curl: (3) [globbing] dấu ngoặc nhọn lồng nhau không được hỗ trợ ở vị trí X

Điều này là do dấu ngoặc nhọn {} và dấu ngoặc vuông [] là các ký tự gạch tròn đặc biệt trong dấu ngoặc nhọn. Để tắt hình cầu này, hãy sử dụng tùy chọn " -g ".

Ví dụ: truy vấn khía cạnh Solr sau đây sẽ không thành công nếu không có "-g" để tắt curl Globbing : curl -g 'http://localhost:8983/solr/query?json.facet={x:{terms:"myfield"}}'


3
Đây là giải pháp chính xác cho tôi, sử dụng -ghoạt động như mong đợi. Cảm ơn @Yonik
arjones

2
Chúa ơi, tôi đang tìm kiếm giải pháp cho vấn đề cong GraphQL của mình và điều này đã giúp tôi. Rất tuyệt vời.
NetOperator Wibby

39

Cần lưu ý rằng Accepttiêu đề cho máy chủ biết điều gì đó về những gì chúng tôi đang chấp nhận trở lại, trong khi tiêu đề có liên quan trong ngữ cảnh này làContent-Type

Bạn thường nên chỉ định Content-Typenhư application/jsonkhi gửi JSON. Đối với curl, cú pháp là:

-H 'Content-Type: application/json'

Vì vậy, lệnh curl hoàn chỉnh sẽ là:

curl -H 'Content-Type: application/json' -H 'Accept: application/json' -X PUT -d '{"tags":["tag1","tag2"],"question":"Which band?","answers":[{"id":"a0","answer":"Answer1"},{"id":"a1","answer":"answer2"}]}' http://example.com/service`

2

Hãy thử sử dụng một dấu nháy đơn thay vì dấu ngoặc kép cùng với -g

Kịch bản sau phù hợp với tôi

curl -g -d '{"collection":[{"NumberOfParcels":1,"Weight":1,"Length":1,"Width":1,"Height":1}]}" -H "Accept: application/json" -H "Content-Type: application/json" --user test@testmail.com:123456 -X POST  https://yoururl.com

VỚI

curl -g -d "{'collection':[{'NumberOfParcels':1,'Weight':1,'Length':1,'Width':1,'Height':1}]}" -H "Accept: application/json" -H "Content-Type: application/json" --user test@testmail.com:123456 -X POST  https://yoururl.com

Điều này đặc biệt giải quyết lỗi của tôi lỗi lệnh curl: dấu hai chấm url xấu là ký tự đầu tiên


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.