Regex extract value trong json string theo điều kiện

xin chào các bác, e có 1 json string và chưa tìm đc cách extract value của nó như bên dưới ạ. bác nào có solution nào để giải quyết vẫn đề này k ạ.

điều kiện: lấy value của url theo id

vd: id = 1 thì regex sẽ get ra value của url là https://example.com/1

# json string
'{
  "content_a": [
    {
      "id": "1",
      "status": 0,
      "thumbnail_width": 1080,
      "thumbnail_height": 1080,
      "url": "https://example.com/1",
      "publish_time": 1665234050
    },
    {
      "id": "2",
      "status": 0,
      "thumbnail_width": 1080,
      "thumbnail_height": 1080,
      "url": "https://example.com/2",
      "publish_time": 1665234050
    }
  ],
  "content_b": {}
}'

e dùng regex này đã ra kq như mong muôn, các bác xem góp ý giúp e nhé

let match = json_string.match(/(?<="id":"2".*)(?<="url":)"(?<url>.*?)"/)
console.log(match.groups.url)
# https://example.com/1

Chuyển JSON thành thực thể trong js rồi lấy url theo id thôi.
Hoặc mình chưa hiểu ý định của bạn.

4 Likes

à json string k đẹp như demo đâu bác, nó tả phế lù lắm. nên ms cần regex

bạn đưa ra 1 ví dụ, mọi người họ trợ rồi bản bảo thực tế khác với ví dụ bạn đưa ra, vậy thì bạn còn muốn gì nữa?

1 Like

Json là json chứ nhỉ. Lại có cả khái niệm json đẹp và json không đẹp nữa à

5 Likes

Dữ liệu kiểu json thì decode nó ra thôi. Js có JSON.parse(). Không dùng regex.

1 Like

Vậy thì càng có lý do để câu trả lời mình rất thích hợp.
Khi chuyển nó thành thực thể trong JS thì cho dù nó định dạng kiểu gì thì cũng chỉ là một.
Ví dụ nó như này:

{
  "content_a": [
    {
      "id": "1",
      "status": 0,
      "thumbnail_width": 1080,
      "thumbnail_height": 1080,
      "url": "https://example.com/1",
      "publish_time": 1665234050
    },
    {
      "id": "2",
      "status": 0,
      "thumbnail_width": 1080,
      "thumbnail_height": 1080,
      "url": "https://example.com/2",
      "publish_time": 1665234050
    }
  ],
  "content_b": {}
}

Hay nó là:

{ "content_a": [ { "id": "1", "status": 0, "thumbnail_width": 1080, "thumbnail_height": 1080, "url": "https://example.com/1", "publish_time": 1665234050 }, { "id": "2", "status": 0, "thumbnail_width": 1080, "thumbnail_height": 1080, "url": "https://example.com/2", "publish_time": 1665234050 } ], "content_b": {} }

Thậm chí định dạng rất lung tung như này:

{"content_b": {

},"content_a": [{
      "id": "1","status": 0,
      "thumbnail_width": 1080,"thumbnail_height": 1080,"url": "https://example.com/1",
      "publish_time": 1665234050
    },                                                  {
      "status": 0,
      "url": "https://example.com/2",
      "publish_time": 1665234050,
      "thumbnail_width": 1080,
      "thumbnail_height": 1080,
      "id": "2"
    }
  ]
}

Sau khi chuyển về thực thể trong JS thì nó chả khác gì nhau.

JSON
3 Likes

cái mình nói đến là dùng regex để giải quyết vấn đề trên. chuyển nó thành json thì mình đưa lên để làm j nữa :v

json gọi là đẹp nếu bác có thể parse luôn, có những json bác muốn parse đc nó trong 1 đống text nó # lắm. view page source và capture đoạn json theo điều kiện đó :smiley:

thế bác lại bỏ cái để thảo luận bên trên r

lỗi mình k đưa ra demo cụ thể để bác hiểu, bác góp e nhận nhưng bác cũng nên đọc bài e đang nói về dùng regex để làm chứ json.parse sao e lại k biết dùng (json đẹp vs k đẹp k pải là làm lỗn xộn hay format dễ đọc mà nó nó đc đặt trong 1 đống text đó bác)

chắc lại craw dữ liệu mới ra cái loại json kì dị thế này đc, chứ ai điên mà tạo json mà phải dùng đến regex để đọc :rofl:

2 Likes

Uhm, vậy cậu chỉ cần thêm 1 bước là dọn dẹp để có được 1 xâu JSON là xong mà? :smile:
Regex để làm việc dọn dẹp, rồi parse nó thành JSON object và lấy ID.
2 bước đơn giản tốt hơn so với 1 bước phức tạp và khó kiểm soát :smile:

2 Likes

Vậy thì chủ topic đã làm mọi người lạc lối hoặc anh ta đang sao sao đó. Anh ta cần trích xuất dữ liệu một cái chuỗi trông giống JSON chứ không hẳn JSON. Và nếu như vậy thì cần gì phải đề cập đến khái niệm JSON ở đây khiến lạc đề? Hoặc nên ghi hẳn “xử lý chuỗi trông giống JSON”.

Bạn @trigia có nhận xét bên trên là hợp lý.

Dùng Regex thì phải ngồi mà test cho nhiều case vào, nó không có cách chứng minh “nghiệm đúng” nên anh em ở đây chịu thôi. Vì nói hẳn nó là món khó, ngay cả cái email mà đến nay người ta cũng chỉ copy đâu đó về dùng, chứ chưa tự tin viết.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?