Try this -
The example has also been updated again (I hope!)
Here I'm setting the item ID directly after creating the object (based on the number of entries in ".items" in the json file). Then, I loop through each ".items" in JSON to see which one matches the ID of the object I just created. If it matches, then set it to the animation to the ".animName" that is located in the same JSON entry that matches the ID.
One alternate way you can work with JSON is that if the order of your objects in JSON is fixed, such that the index of the array matches the id of the object (Item ID 2 is at array index 2 of the ".items" array), you can look it up directly with a absolute path instead of a relative path. The path would be "items.2.animName". It's a string, so you can stick an expression in there with &.
Item: Set animation to JSON.Get("items."&Item.ID&".animName") (play from beginning)
If I were to do it this way in this case I would get rid of the "ID" key in the json completely, the index/position of the object becomes it's ID.
Edit: I think a lot of your roadblocks are coming from the JSON object. It's a little less user friendly to work with than an array or dictionary. One of the biggest advantages of JSON it is that it can make it easy for end users mod your game if you keep data in an easily readable JSON file (or collaborators who are not familiar with construct/code in an open source project, for example). If you're the only one who is going to be working with it, it might make more sense to just use an array or dictionary directly. On the other hand, this kind of crafting system project is an excellent application of JSON, and a good way to learn how to use it.